这里主要叙述如何将Python中的数据导入Mysql中,然后通过Python语句来进行数据库的增删查改。也就是将sql语句通过Python的pymysql库方法,来实现两个平台的信息对接。
一、准备工作
1.在Pycharm(Python版本:3.12,最新的几个版本对于普通用户来说,变化不大,所以用哪个都行)中,需要pymysql库,通过命令行输入pip install pymysql,点击Enter确认安装即可。
2.在MySQL导入SQL文件,或者将SQL文件内容复制到MySQL中运行,SQL文件内容如下:
drop database if exists qqmusic;
create database qqmusic CHARACTER SET utf8;
use qqmusic;
drop table if exists musicrank;
create table musicrank(
id VARCHAR(10) not null,
music_no VARCHAR(10) not null,
music_name VARCHAR(300),
music_address VARCHAR(300),
singer VARCHAR(200),
times VARCHAR(200)
);
然后我们可以在MySQL中得到一张表,里面可以存放id,排行、歌名、地址、歌手以及时长信息,数据库表格信息是通过csv文件内容而设定(因为这样好搞数据交互)。
二、基本操作
我们准备好上面环境后,就可以在Pycharm中开始设计了。大概思想就是先封装一个对象,再将csv文件的每一行信息存入这个对象,在通过SQL语句把这个对象存入MySQL
1.封装对象
定义一个musicClass.py文件,存放以下信息,:
class Music:
def __init__(self, id,music_no,music_name,music_address,singer,times):
self.id = id
self.music_no = music_no
self.music_name = music_name
self.music_address = music_address
self.singer = singer
self.times = times
2.SQL语句设计
先进行数据库连接,然后创建游标对象(使用cursor()方法)指向这个数据库连接对象,一个光标跟踪一种数据状态。也就是通过游标对象,按照我们在Pycharm中的SQL语句,去执行MySQL中数据。其中,excute()方法是指通过游标对象执行SQL语句,commit()方法是指通过数据库连接对象提交事务,在操作数据过程中,一般都是一起连用的。
import pymysql
# 获取游标
def sqlConnection():
conn = pymysql.connect(host="localhost", user="root", passwd="123456", database="qqmusic")
c=conn.cursor()
return c,conn
#添加
def sqlInsert(c,conn,mc):
sql=f"insert into musicrank(id,music_no,music_name,music_address,singer,times) VALUES ('{mc.id}', '{mc.music_no}','{mc.music_name}', '{mc.music_address}', '{mc.singer}', '{mc.times}')"
c.execute(sql)
conn.commit()
print("添加成功!")
#删除
def sqlDelete(c,conn,id):
sql=f"delete from musicrank where id='{id}'"
c.execute(sql)
conn.commit()
print("删除成功!")
#获取信息
def sqlSelect(c,conn):
sql="select * from musicrank"
c.execute(sql)
# c.fetchall()是将查询的结果进行抓取
reader=c.fetchall()
conn.commit()
return reader
3.csv文件读取
使用这个with open(文件名, 模式, 编码) [as 别名]:方法可以操作文件数据,使用with关键字是为了更方便,普通方法( open(文件名, 模式, 编码) )打开文件需要用try...except...fanally来进行异常处理+资源关闭,很麻烦,所以用with。文件名是指需要操作的文件名字。模式是指操作类型,主要有'r','w','a',分别代表只读模式,只写模式(写的内容会覆盖)以及追加模式(在原有数据追加数据)。编码是指这个文件以什么编码来打开。
打开 排行榜.csv 文件,将里面的内容提取出来
result = []
with open('排行榜.csv', 'r', encoding='utf-8') as file:
reader = csv.reader(file)
for row in reader:
result.append(row)
4.数据导入数据库
将第二步的SQL语句和第三步的数据,使用起来,这里就只用添加sql语句,感兴趣的自己去使用其他的
c, conn = sqlConnection()
for i in range(1, len(result)):
mc = musicClass.Music(result[i][0], result[i][1], result[i][2], result[i][3], result[i][4], result[i][5])
sqlInsert(c, conn, mc)
5.结果如下:
三、最终代码
1.musicClass.py
class Music:
def __init__(self, id,music_no,music_name,music_address,singer,times):
self.id = id
self.music_no = music_no
self.music_name = music_name
self.music_address = music_address
self.singer = singer
self.times = times
2.主数据
import csv
import pymysql
from qqmusic import musicClass
# 获取游标
def sqlConnection():
conn = pymysql.connect(host="localhost", user="root", passwd="123456", database="qqmusic")
c=conn.cursor()
return c,conn
#添加
def sqlInsert(c,conn,mc):
sql=f"insert into musicrank(id,music_no,music_name,music_address,singer,times) VALUES ('{mc.id}', '{mc.music_no}','{mc.music_name}', '{mc.music_address}', '{mc.singer}', '{mc.times}')"
c.execute(sql)
conn.commit()
print("添加成功!")
#删除
def sqlDelete(c,conn,id):
sql=f"delete from musicrank where id='{id}'"
c.execute(sql)
conn.commit()
print("删除成功!")
#获取信息
def sqlSelect(c,conn):
sql="select * from musicrank"
c.execute(sql)
reader=c.fetchall()
conn.commit()
return reader
result = []
with open('排行榜.csv', 'r', encoding='utf-8') as file:
reader = csv.reader(file)
for row in reader:
result.append(row)
c, conn = sqlConnection()
for i in range(1, len(result)):
mc = musicClass.Music(result[i][0], result[i][1], result[i][2], result[i][3], result[i][4], result[i][5])
sqlInsert(c, conn, mc)
四、补充
以csv文件为例,csv文件导入数据库一般有两种方法:
1、通过SQL的insert方法一条一条导入,适用于数据量小的CSV文件,以上就是。
2、通过load data方法导入,速度快,适用于大数据文件。有兴趣的去查找学习。