前言
Mysql是现在主流的数据库,除了一般的CSV导入到Mysql,Mysql导出到csv,还应该有Mysql导出到python,本篇文章就是一些python操作Mysql的简单操作。
安装必要模块
在python中,我个人比较常用MySQLdb这个模块,但是因为某些原因,用pip3和pycharm自带的安装都失败,于是,我个人建议在:
http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
找到自己合适的版本进行手动安装。
使用python连接数据库
import MySQLdb
conn = MySQLdb.connect(
host = '127.0.0.1',#本地地址
user = 'root',#一般默认用户名
passwd = '123456',#本地数据库登录密码
db = 'data',#数据库名称
port = 3306,#安装mysql默认的端口号
charset = 'utf8'#设置数据库统一编码
)
如果没有报错,那么恭喜你安装成功了。
创建游标
cursor = conn.cursor()
游标就是相当于一个缓冲区,用来暂存结果。
获取数据
这里我们使用select语句获取数据
cursor = conn.cursor()
cursor.execute('SELECT * FROM `grade`;')
data1 = cursor.fetchone()#取一条数据
print(data1)
(‘90’, ‘100’, ‘A’)
如图所示,我们取出来的数据是元组的形式。
当我们操作结束的时候,应该养成把数据库关闭的习惯。
conn.close()
异常处理
当我们在操作的过程中,会遇到出现异常的情况,我们希望能像在Mysql中操作一样出现异常提示,所以我们需要加入异常处理模块。
try:
conn = MySQLdb.connect(
host = '127.0.0.1',
user = 'root',
passwd = '12345',
db = 'data',
port = 3306,
charset = 'utf8'
)
except MySQLdb.Error as e:
print('Error:%s' % e)
这里我把登录密码改成“12345”,于是便报错了:
Error:(1045, “Access denied for user ‘root’@’localhost’ (using password: YES)”)
把以上代码整理一下:
import MySQLdb
try:
conn = MySQLdb.connect(
host = '127.0.0.1',#本地地址
user = 'root',#一般默认用户名
passwd = '123456',#本地数据库登录密码
db = 'data',#数据库名称
port = 3306,#安装mysql默认的端口号
charset = 'utf8'#设置数据库统一编码
)
cursor = conn.cursor()
cursor.execute('SELECT * FROM `grade`;')
data1 = cursor.fetchall() # 取一条数据
print(data1)
conn.close()
except MySQLdb.Error as e:
print('Error:%s' % e)
插入数据
cursor.execute('insert into grade (LOW , UPP , RANK) VALUE (89,90, "A" ) ')
conn.commit()
conn.close()
这里需要注意的是要有conn.commit()语句,所增加的内容才会提交到数据库。
接下来的是数据导入到pandas,为数据分析做准备。
导入表中所有数据,并查看前5行
import MySQLdb
import pandas as pd
try:
conn = MySQLdb.connect(
host = '127.0.0.1',#本地地址
user = 'root',#一般默认用户名
passwd = '123456',#本地数据库登录密码
db = 'data',#数据库名称
port = 3306,#安装mysql默认的端口号
charset = 'utf8'#设置数据库统一编码
)
sql = 'select * from grade'
df = pd.read_sql(sql,conn)
print(df.head())
except MySQLdb.Error as e:
print('Error:%s' % e)
LOW UPP RANK
0 90 100 A
1 80 89 B
2 70 79 C
3 60 69 D
4 0 59 E
将数据导出到CSV文件
df.to_csv('F:\\python\\111.csv', encoding = 'utf-8', index = False)
把数据(DataFrame格式)导入到数据库
import MySQLdb
import pandas as pd
from sqlalchemy import create_engine
host = '127.0.0.1'
port = 3306
db = 'data'
user = 'root'
password = '123456'
engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s") % (user, password, host, db))
try:
df = pd.DataFrame([[1,'x'],[2,'y']],columns=list('ab'))
df.to_sql('test1',con=engine,if_exists='replace',index=False)
except Exception as e:
print(e)
可以看到,已经导入到数据库了。
相关参考资料:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_sql.html