建立连接
通过SQLAlchemy中的create_engine函数连接数据库
from sqlalchemy import create_engine
# 兼容2.0的写法
engine = create_engine("mysql+pymysql://hao:671010@localhost:3306/mydb?charset=utf8", echo=True, future=True)
代码如下:
"""
date:20230318
将CSV文件写入到MySQL中
"""
import pandas as pd
import os
from sqlalchemy import create_engine
def connect_db(db):
# "数据库类型+数据库驱动://数据库用户名:数据库密码@IP地址:端口号/数据库?编码"
# echo=True echo用来设置SQLAlchemy日志,设置为True时,可以看见所有数据库的操作记录。
engine = create_engine("mysql+pymysql://hao:123456@localhost:3306/{}?charset=utf8".format(db), echo=True, future=True)
return engine
def create_stock(tscode, db, code):
# 读取本地CSV文件
df = pd.read_csv("I:\python_stock\datas\tushare_download\day\{}.csv".format(tscode))
engine = connect_db(db)
# name="stock_{}".format(code)数据库表名,全部小写否则会报错,
# if_exists="replace" 如果表存在,删除表,重建并插入给定的 DataFrame
df.to_sql(name="stock_{}".format(code), con=engine, index=False, if_exists="replace")
def read_csv(code):
df = pd.read_csv("I:\python_stock\datas\tushare_download\day\{}.csv".format(code))
return df
def read_sql(code, db):
sql = " select * from {};".format(code)
engine = connect_db(db)
# read_sql_query的两个参数: sql语句, 数据库连接
df = pd.read_sql_query(sql, engine)
return df
if __name__ == "__main__":
#数据库名
stockDB = "tushare_day"
stockList = "stock_list"
#创建stock_list股票列表的数据库表
create_stock(tscode=stockList, db=stockDB, code=stockList)
df = read_csv(stockList)
# filename = os.path.join(os.path.join(os.getcwd(), "datas"), "stock_list.csv")
# df = pd.read_csv(filename)
data = list(df["ts_code"])
# print(data)
#创建各股票表,如stock_600288、stock_002624等表
for i in range(0, len(li1)):
codeStock = li1[i].rstrip(".SZHBJ")
create_stock(tscode=li1[i], db=stockDB, code=codeStock)
print(codeStock)
将股票数据存到mysql数据库中
engine=create_engine其中echo用来设置SQLAlchemy日志,设置为True时,可以看见所有数据库的操作记录。create_engine返回的是Engine的一个实例,代表了操作数据库的核心接口,处理数据库和数据库的API。初次调用create_engine并不会真正连接数据库,只有在真正执行一条命令的时候才会尝试建立连接,目的是节省资源。
文章为作者独立观点,不代表股票交易接口观点