【问题标题】:Write Pandas Dataframe via SQLAlchemy in MySQL database在 MySQL 数据库中通过 SQLAlchemy 编写 Pandas Dataframe
【发布时间】:2017-05-01 01:47:00
【问题描述】:

我正在尝试使用 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 测试(日期、代码、adj_close)值 (%(date)s, %(ticker)s, %(adj_close)s)'] [参数:{'ticker': 0
苹果

有人知道它是如何工作的吗?代码如下,没有上面提到的代码部分:

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

【问题讨论】:

    标签: python mysql pandas dataframe sqlalchemy


    【解决方案1】:

    要在单个INSERT 中插入多行,不要为每列传递Series,而是传递记录列表。

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

    【讨论】:

    • 感谢您的帮助。现在我收到以下错误消息:Cannot add or update a child row: a foreign key constraint fails (financialanalysis.market_price_data, CONSTRAINT market_price_data_ibfk_1` FOREIGN KEY (ticker) REFERENCES product (ticker)) [SQL: 'INSERT INTO`
    • 这看起来像是数据完整性问题。您插入的行违反了架构中的外键约束。在不了解所有表关系的情况下,我真的无能为力。
    • 感谢您的回答。我更新了上面提供错误消息的代码。
    • 成功了。发现我的问题是一张表中缺少数据:)
    猜你喜欢
    • 2013-07-22
    • 2015-08-18
    • 2020-02-21
    • 2017-08-01
    • 2018-08-19
    • 2022-01-04
    • 2020-08-23
    • 2018-05-20
    • 2020-10-25
    相关资源
    最近更新 更多