在 python 脚本中使用 cursor.execute 获取时间戳错误消息
getting timestamp error message using cursor.execute in python script
我的代码是收集股票数据并将其保存到数据库中,但是在获取数据后我在尝试将其保存到数据库时遇到错误。
代码片段是:
(在 cursor.execute 失败)
all_tickers = pd.read_sql("SELECT ticker, id FROM security", conn)
ticker_index = dict(all_tickers.to_dict('split')['data'])
tickers = list(ticker_index.keys())
start = dt.datetime(2018, 8, 8)
end = dt.datetime.now()
for ticker in tickers:
# Download data
df = pdr.get_data_yahoo(ticker, start, end)
# Write to daily_price
for row in df.itertuples():
values = [YAHOO_VENDOR_ID, ticker_index[ticker]] + list(row)
sql_two = "INSERT INTO daily_price (data_vendor_id,ticker_id, price_date, open_price, high_price, low_price, close_price, adj_close_price, volume) " + \
"VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)"
cursor.execute(sql_two, tuple(values)) #<--errorhere
错误信息:
AttributeError: 'Timestamp' object has no attribute 'translate'
我试过调整 start/end 时间,因为 'timestamp' 对象让我觉得它与我流逝的时间有关,但我不知道这应该是什么是。
我认为 MySQL 不喜欢 pandas Timestamp 对象,但我没有 MySQL 来测试它......这太冗长了留下评论。
你能试着用这个替换你的 values
行吗?:
values = [YAHOO_VENDOR_ID, ticker_index[ticker]] +
[row[0].to_pydatetime()] + list(row[1:])
我的代码是收集股票数据并将其保存到数据库中,但是在获取数据后我在尝试将其保存到数据库时遇到错误。
代码片段是: (在 cursor.execute 失败)
all_tickers = pd.read_sql("SELECT ticker, id FROM security", conn)
ticker_index = dict(all_tickers.to_dict('split')['data'])
tickers = list(ticker_index.keys())
start = dt.datetime(2018, 8, 8)
end = dt.datetime.now()
for ticker in tickers:
# Download data
df = pdr.get_data_yahoo(ticker, start, end)
# Write to daily_price
for row in df.itertuples():
values = [YAHOO_VENDOR_ID, ticker_index[ticker]] + list(row)
sql_two = "INSERT INTO daily_price (data_vendor_id,ticker_id, price_date, open_price, high_price, low_price, close_price, adj_close_price, volume) " + \
"VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)"
cursor.execute(sql_two, tuple(values)) #<--errorhere
错误信息:
AttributeError: 'Timestamp' object has no attribute 'translate'
我试过调整 start/end 时间,因为 'timestamp' 对象让我觉得它与我流逝的时间有关,但我不知道这应该是什么是。
我认为 MySQL 不喜欢 pandas Timestamp 对象,但我没有 MySQL 来测试它......这太冗长了留下评论。
你能试着用这个替换你的 values
行吗?:
values = [YAHOO_VENDOR_ID, ticker_index[ticker]] +
[row[0].to_pydatetime()] + list(row[1:])