簡體   English   中英

通過SQLAlchemy在MySQL數據庫中寫入Pandas Dataframe

[英]Write Pandas Dataframe via SQLAlchemy in MySQL database

我正在嘗試使用pandas將pandas數據幀寫入mysql數據庫。 這對我使用非常適合

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'series'不能轉換為MySQL類型[SQL:'INSERT INTO test(date,ticker,adj_close)VALUES(%(date)s,%(ticker)s,%(adj_close)s)'] [參數: {“ ticker”:0
AAPL

有人知道如何工作嗎? 下面的代碼沒有上面提到的代碼部分:

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'})

要在單個INSERT插入多行,請不要為每個列傳遞Series ,而要傳遞記錄列表。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM