Python之数据库导入(py3.5)
数据库版本:MySQL
Python版本:3.5
之前用想用MySQLdb来着,后来发现py3.5版本不支持,现选择pymysql
现在想将数据库adidas中的表jd_comment读取至python中的DataFrame,方便数据分析处理
大众代码如下:
import pymysql
import pandas as pd
import numpy as np
try:
conn = pymysql.connect(host='localhost', user='root', passwd='123456', db='adidas', charset='UTF8')
cur = conn.cursor()
cur.execute('select * from jd_comment')
rows = cur.fetchall() #获取元组列表
cur.close()
conn.close()
except pymysql.Error as e:
print('Mysql Error %d: %s' %(e.args[0], e.args[1]))
cols = list(zip(*cur.description)) #可以看到列名(由元组构成)
#将数据库中的数据保存为DataFrame(数据必须是字典或者数组,列表也必须是list或者数组)
adidas = pd.DataFrame(np.array(rows), columns=list(cols[0]))
charset必须和之前数据库保存一致,否则中文会出现乱码
简单说2句:host指的是主机名
user用户名
passwd密码
db 数据库名
rows获取的是数据库中Tables的数据行,但是保存的是元组tuple,如若要构造成DataFrame,需转化为数组或者字典
cols列表中第一个元组保存的是数据库中Tables的列名,如若要构造成DataFrame,需要转化为list或数组
详细可参考Dataframe的用法
看了上述代码感觉每次导入一个数据库好繁琐,下面给出一个精简版。代码中的try---except如不需要,也可自行删除
import pandas.io.sql as sql
import pymysql
try:
conn = pymysql.connect(host='localhost', user='root', passwd='123456', db='adidas', charset='UTF8')
adidas = sql.read_sql('select * from jd_comment', conn)#将数据库读入dataframe
conn.close()
except pymysql.Error as e:
print('Mysql Error %d: %s' %(e.args[0], e.args[1]))