02_04将股票数据存到sqlite数据库中
1. 建立连接
通过SQLAlchemy中的create_engine()函数连接数据库
from sqlalchemy import create_engine
engine = create_engine('sqlite:///test.db)
# engine = create_engine("数据库类型+数据库驱动://数据库)
create_engine()返回的是Engine的一个实例,代表了操作数据库的核心接口,处理数据库和数据库的API。 初次调用create_engine()并不会真正连接数据库,只有在真正执行一条命令的时候才会尝试建立连接,目的是节省资源。
2.将股票数据存到sqlite数据库中
import pandas as pd
import os
from sqlalchemy import create_engine
def connect_db(db):
# "数据库类型+数据库驱动://数据库用户名:数据库密码@IP地址:端口号/数据库?编码"
# echo=True echo用来设置SQLAlchemy日志,设置为True时,可以看见所有数据库的操作记录。
engine = create_engine('sqlite:///{}.db'.format(db))
return engine
def create_stock(tscode, db, code):
# 读取本地CSV文件
path = os.path.join(os.path.join(os.getcwd(), "datas"), tscode + ".csv")
df = pd.read_csv(path)
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):
path = os.path.join(os.path.join(os.getcwd(), "datas"), code + ".csv")
df = pd.read_csv(path)
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_data'
stockList = 'stock_list'
#创建stock_list股票列表的数据库表
create_stock(tscode=stockList, db=stockDB, code=stockList)
df = read_csv(stockList)
data = list(df['ts_code'])
#创建各股票表,如stock_600288、stock_002624等表
for i in range(0, len(data)):
codeStock = data[i].rstrip('.SZHBJ')
create_stock(tscode=data[i], db=stockDB, code=codeStock)
print(codeStock)