我是一个正在学习 Python 的编程新手。
我正在尝试将加密货币数据备份到我自己的数据库,以便稍后进行回测。 这是我目前编写的代码。
import pandas
from pandas.io.sql import to_sql
import sqlite3
import pybithumb
import pickle
print("\nOpening DB and saved_tickers...")
con= sqlite3.connect("E:\pythonDB\DB_fetch_1m.db")
cur = con.cursor()
with open ("saved_tickers.lst", "rb") as fp:
saved_tickers = pickle.load(fp)
for ticker in saved_tickers:
# print("\n" + str('## ') + ticker + str(' ##'))
# print("Creating new database tables if needed...")
cur.execute(f"CREATE TABLE IF NOT EXISTS {ticker} (time TIMESTAMP PRIMARY KEY NOT NULL, open, high, low, close, volume)")
# print("Fetching latest data from Bithumb.")
data = pybithumb.get_candlestick(ticker, "KRW", "1m")
# print("Saving and Processing DB...")
data.to_sql(str(ticker) + "_tmp", con, if_exists='replace')
table = ticker
table_tmp = ticker+"_tmp"
cur.execute(f"INSERT OR IGNORE INTO {table} SELECT * FROM {table_tmp}")
saved_tickers.lst 包含我选择的加密货币。现在,如果我
print(saved_tickers)
我明白
['XRP', 'LTC', 'ETC', 'BTC', 'ETH']
当我运行这段代码时,代码:
此时,'time'列被设置为主键,这样表中就没有给定时间的重复信息。
它还将相同的数据保存到 'ticker'_tmp 表中。 然后将 'ticker'_tmp 数据插入到 'ticker'(以便表 'ticker' 没有重复项) 代码运行良好并完成了它的意图,但列表中的最后一项总是有问题。 如果没有任何表,它会检查并创建名为“ticker”的表。 然后它生成并替换新获取的数据到表 'ticker'_tmp。 但它永远不会将 'ticker'_tmp 数据插入到 'ticker' 表中。 (不运行 INSERT OR IGNORE INTO {table} SELECT * FROM {table_tmp})
我不知道为什么。 我试过仔细检查股票代码名称。更改了saved_list 几次 而且每一次,列表中的最后一个都有问题。
请,任何建议表示赞赏。 谢谢。