如何用pandas将新列附加到MySQL?

时间:2018-04-02 03:27:13

标签: python mysql pandas dataframe

我的理解是你可以从数据库(在这种情况下是MySQL)中提取数据,将这些数据加载到pandas df来操作它(添加新列,在SQL中不容易完成的复杂计算等)然后加载新数据列回到MySQL。但是,我在将最新创建的列添加回MySQL中的同一个现有表中的最后一步时遇到了问题。我找到的唯一类似问题是here,但我遗漏了一个关键组件。

我正在使用pandas to_sql来执行此任务(有更好的选择吗?)。我的代码从我的MySQL表中提取加密数据,将其加载到pandas df中,我添加了一个新的volatile列(我知道你可以在SQL中计算这个,这只是一个例子)。

SQL表(加密)

    date        open_price  close_price   high_price    low_price       market_cap       volume
1   2018-03-11  8852.78     9578.63       9711.89       8607.12      149,716,000,000    6,296,370,000
2   2018-03-10  9350.59     8866.00       9531.32       8828.47      158,119,000,000    5,386,320,000
3   2018-03-09  9414.69     9337.55       9466.35       8513.03      159,185,000,000    8,704,190,000
4   2018-03-08  9951.44     9395.01       10147.40      9335.87      168,241,000,000    7,186,090,000

pandas df

    date        open_price  close_price   high_price    low_price       market_cap       volume        Volatility
1   2018-03-11  8852.78     9578.63       9711.89       8607.12      149,716,000,000    6,296,370,000  .2
2   2018-03-10  9350.59     8866.00       9531.32       8828.47      158,119,000,000    5,386,320,000  .58
3   2018-03-09  9414.69     9337.55       9466.35       8513.03      159,185,000,000    8,704,190,000  .56
4   2018-03-08  9951.44     9395.01       10147.40      9335.87      168,241,000,000    7,186,090,000  .12

我首先进入MySQL并添加了一个新列:

ALTER TABLE `crypto`
    ADD COLUMN Volatility float NOT NULL;

以下代码是我以前首先将数据推送到MySQL的代码。我将if_exists更改为append但我收到了错误消息

df.to_sql(name='crypto', con=engine, if_exists = 'append', chunksize=10000)

DatabaseError: (mysql.connector.errors.DatabaseError) 1364 (HY000): Field 'Volitility_90' doesn't have a default value 

如何在MySQL表中添加1个新列?我是否需要使用其他包并使用cursor.execute()。任何有关此代码的帮助,或一些在线教程都会有所帮助!我似乎无法在这个具体的例子中找到很多内容,这让我第二次完全猜测整个数据操作策略。

1 个答案:

答案 0 :(得分:0)

由于表中已有行,因此SQL无法知道要在现有行的新列中填充哪些值。

创建新列时需要说明默认值。

请在此处查看如何执行此操作: Adding a new SQL column with a default value