2016-12-15 76 views
0

我正在嘗試使用熊貓將一個熊貓數據框寫入mysql數據庫。這我使用在MySQL數據庫中通過SQLAlchemy寫熊貓數據框

to_sql

但我想要的是寫上日期,股票和對我自己使用的SQLAlchemy表測試adj_close了完美的作品。不知何故,我嘗試了它,但它不工作。使用以下:

ins = test.insert() 

ins = test.insert().values(date=DataLevels['Date'], ticker=DataLevels['ticker'], adj_close=DataLevels['adj_close']) 
ins.compile().params 
mysql_engine.execute(ins) 

使用它,我收到以下錯誤消息:

(mysql.connector.errors.ProgrammingError)失敗處理 pyformat參數; Python'系列'不能轉換爲類型[SQL:INSERT INTO test(date,ticker,adj_close)VALUE (%(date)s,%(ticker)s,%(adj_close)s)'] [參數:{ '股票':0
AAPL

是否硬骨素有線索怎麼能工作呢?該代碼是下面wothout上述代碼部分:

import sqlalchemy as sqlal 
import pandas_datareader.data as pdr 
import pandas as pd 

mysql_engine = sqlal.create_engine('mysql+mysqlconnector://xxx') 
mysql_engine.raw_connection() 

metadata = sqlal.MetaData() 

test = sqlal.Table('test', metadata, 
           sqlal.Column('date', sqlal.DateTime, nullable=True), 
           sqlal.Column('ticker', sqlal.String(10), sqlal.ForeignKey("product.ticker"), nullable=True), 
           sqlal.Column('adj_close', sqlal.Float, nullable=True), 
           ) 

metadata.create_all(mysql_engine) 

DataLevels = pdr.DataReader(['ACN','AAPL','^GDAXI'], 'yahoo', '2016-11-19', '2016-12-1') 
DataLevels = pd.melt(DataLevels['Adj Close'].reset_index(), id_vars='Date', value_name='adj_close', var_name='minor').rename(columns={'minor': 'ticker'}) 

回答

1

要在單個INSERT插入多行,不傳遞一個Series對於每一列,通過的記錄列表。

test.insert().values(DataLevels[['Date', 'ticker', 'adj_close']].to_dict('records')) 
+0

感謝您的幫助。現在我收到以下錯誤消息:'無法添加或更新子行:外鍵約束失敗('financialanalysis'.'market_price_data',CONSTRAINT'market_price_data_ibfk_1' FOREIGN KEY('ticker')REFERENCES'product'('ticker' ))[SQL:'INSERT INTO' – MCM

+0

這看起來像數據完整性問題。您插入的行在您的模式中違反了外鍵約束。在不瞭解所有餐桌關係的情況下,我無法真正幫助更多。 –

+0

感謝您的回答。我更新了上面提供錯誤信息的代碼。 – MCM