[英]Write Pandas Dataframe via SQLAlchemy in MySQL database
I am trying to write a pandas dataframe into a mysql database using pandas. 我正在尝试使用pandas将pandas数据帧写入mysql数据库。 This works perfect for me using
这对我使用非常适合
to_sql
to_sql
But what I want is to write the date, ticker and the adj_close in the table test on my own using sqlalchemy. 但是我想要的是使用sqlalchemy自己在表测试中写日期,代码和adj_close。 Somehow I tried doing it but it is not working.
我以某种方式尝试执行此操作,但是它不起作用。 using the following:
使用以下内容:
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)
Using it I receive the following error message: 使用它,我收到以下错误消息:
(mysql.connector.errors.ProgrammingError) Failed processing pyformat-parameters;
(mysql.connector.errors.ProgrammingError)处理pyformat参数失败; Python 'series' cannot be converted to a MySQL type [SQL: 'INSERT INTO test (date, ticker, adj_close) VALUES (%(date)s, %(ticker)s, %(adj_close)s)'] [parameters: {'ticker': 0
Python'series'不能转换为MySQL类型[SQL:'INSERT INTO test(date,ticker,adj_close)VALUES(%(date)s,%(ticker)s,%(adj_close)s)'] [参数: {“ ticker”:0
AAPLAAPL
Does anbody has a clue how that can work? 有人知道如何工作吗? The code is below wothout the code parts mentioned above:
下面的代码没有上面提到的代码部分:
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.