在网上找了若干篇教程,一顿操作猛如虎之后发现,大多数教程推荐的 MySQLdb好像不行啊,是python 2.x的...这年头不该默认主流python 3.x了嘛?
又针对python 3.x检索了一番,找到了PyMySQL(参见菜鸟教程-PyMySQL驱动)。能用是能用,但还是有点不太对啊,这查询出来保存为字符串了,要弄成结构化的还要写for循环...这操作未免也太不python了不是?
所以用"pandas+MySQL"作为关键词第三遍搜索,终于找到了优雅的答案,现整理出来和大家分享。全文分为python连接、读取、写入数据库三部分。
Part 1. Python连接数据库
首先,在cmd里安装pandas、sqlalchemy、pymysql三个包(pymysql也可用mysqlconnector替换,两者都可以连接MySQL数据库):
pip install pandas
pip install sqlalchemy
pip install pymysql
初始化数据库连接:
import pandas as pd
from sqlalchemy import create_engine
# 初始化数据库连接
# 按实际情况依次填写MySQL的用户名、密码、IP地址、端口、数据库名
engine = create_engine('mysql+pymysql://root:12345678@localhost:3306/testdb')
# 如果觉得上方代码不够优雅也可以按下面的格式填写
# engine = create_engine("mysql+pymysql://{}:{}@{}:{}/{}".format('root', '12345678', 'localhost', '3306', 'testdb'))
这里“mysql+pymysql://”是指明通过pymysql这个包来连接数据库,也可以使用mysqlconnector;如果是python2.x可以替换为MySQLdb来连接。MySQL的IP地址和端口号,默认为localhost:3306。
Part 2. Python读取数据库
写好查询语句并执行,将结果存入数据框DataFrame:
# MySQL导入DataFrame
# 填写自己所需的SQL语句,可以是复杂的查询语句
sql_query = 'select * from product;'
# 使用pandas的read_sql_query函数执行SQL语句,并存入DataFrame
df_read = pd.read_sql_query(sql_query, engine)
print(df_read)
查看该数据框df_read:
Part 3. Python写入数据库
# DataFrame写入MySQL
# 新建DataFrame
df_write = pd.DataFrame({'id': [10, 27, 34, 46], 'name': ['张三', '李四', '王五', '赵六'], 'score': [80, 75, 56, 99]})
# 将df储存为MySQL中的表,不储存index列
df_write.to_sql('testdf', engine, index=False)
在MySQL中查看该表:
Reference
- https://blog.csdn.net/lzw2016/article/details/84720433
- https://www.jianshu.com/p/238a13995b2b
- https://www.runoob.com/python3/python3-mysql.html