Python 在 MySQL 中读取、写入数据
写入数据:
import pandas as pd
from sqlalchemy import create_engine
import pymysql
#准备一个示例数据
df = ts.get_hist_data('000875')#读取数据,格式为DataFrame
#创建一个engine
engine = create_engine('mysql://username:password@localhost:3306/databasename?charset=utf8') #databasename是连接的数据库名字,必须事先创建。 字符编码设置为utf8,否则有些latin字符不能处理
pd.io.sql.to_sql(df,'table', engine, schema='stock', if_exists='append') #table是databasename下的一张表,如果不存在,就创建这张表。如果存在,当if_exists='append',就以追加的方式写入数据。
换一种写法,利用 dataframe 实例的 to_sql 方法:
engine = create_engine('mysql://root:1234@localhost:3306/stock?charset=utf8')
try:#存入数据库,有时候运行一次报错,运行第二次就没问题了,这里使用try函数。报错的时候,其实在数据库中创建了表头,只是还没写入数据。
df.to_sql('ticks', engine, if_exists='append')
except Exception:
df.to_sql('ticks', engine, if_exists='append')
读取数据:
#创建engine
engine = create_engine('mysql://root:1234@localhost:3306/stock?charset=utf8')
#从数据库读取数据
df1 = pd.read_sql('tick_data',engine)#从数据库中读取表存为DataFrame
通过查询方式读取数据:
#连接数据库的参数
config = {
'host':'127.0.0.1',
'port':3306,
'user':'root',
'password':'0428',
'db':'world',
'charset':'utf8mb4',
'cursorclass':pymysql.cursors.DictCursor,
}
#连接数据库
db = pymysql.connect(**config)
#创建游标
cursor = db.cursor()
## 执行SQL,并返回收影响行数
cursor.execute('select * from city')
result = cursor.fetchall()
type(result) #list 查询结果是一个list,而pd.read_sql 读入了一个dataframe;
df3 = pd.DataFrame(result) #将查询结果转为一个dataframe。
db.commit() #提交更改
cursor.close() #关闭游标
db.close() #关闭数据库