插入PostgreSQL 数据库操作,函数里使用了try…except…pass是为了避免某些数据出错导致程序崩溃。
from sqlalchemy import create_engine
import psycopg2
engine = create_engine('postgresql+psycopg2://postgres:123456@localhost:5432/postgres')
def insert\_sql(data,db_name,if_exists='append'):
#使用try...except..continue避免出现错误,运行崩溃
try:
data.to_sql(db_name,engine,index=False,if_exists=if_exists)
#print(code+'写入数据库成功')
except:
pass
复制代码
由于行情数据量庞大,下载比较慢,先下载20190101至20190425期间日交易
数据,后续再不断更新。
#下载20190101-20190425数据并插入数据库stock\_data
#此步骤比较耗费时间,大致25-35分钟左右
for code in get_code():
data=get_data(code)
insert_sql(data,'stock\_data')
#读取整张表数据
df=pd.read_sql('stock\_data',engine)
print(len(df))
#输出结果:270998
#选取ts\_code=000001.SZ的股票数据
df=pd.read_sql("select \* from stock\_data where ts\_code='000001.SZ'",engine)
print(len(df))
复制代码
构建一个数据更新函数,可以下载和插入其他时间周期的数据。2018年1月1日至2019年4月25日,数据就已达到108万条。
#更新数据或下载其他期间数据
def update\_sql(start,end,db_name):
from datetime import datetime,timedelta
for code in get_code():
data=get_data(code,start,end)
insert_sql(data,db_name)
print(f'{start}:{end}期间数据已成功更新')
#下载20180101-20181231期间数据
#只需运行一次,不再运行后可以注释掉
#下载数据比较慢,需要20-35分钟左右
start='20180101'
end=