python - Pandas to_sql - 在附加 DataFrame 时增加表的索引

标签 python mysql pandas dataframe sqlalchemy

我一直在努力开发一个以数据分析 Python 3.7.0 脚本的日常执行为中心的产品。每天半夜会处理海量数据,然后将结果导出到两张MySQL表中。第一个表将仅包含与当天相关的数据,而另一个表将包含所有执行的串联数据。

为了举例说明我目前有什么,请看下面的代码,假设 df 将是从数据分析中生成的最终 DataFrame:

import pandas as pd
import sqlalchemy

engine = sqlalchemy.create_engine(r"mysql+pymysql://user:psswd@localhost/pathToMyDB")

df = pd.DataFrame({'Something':['a','b','c']})

df.to_sql('DReg', engine, index = True, if_exists='replace') #daily database
df.to_sql('AReg', engine, index = False, if_exists='append') #anual database

正如您在我的第二个 to_sql 函数的参数中看到的那样,我没有为 anual 数据库设置索引。然而,我的经理要求我这样做,创建一个以一个简单规则为中心的索引:它将是一个自动递增的数字索引,它会自动将一个数字分配给数据库中保存的与其位置相对应的每一行。

所以基本上,我第一次保存 df 时,数据库应该如下所示:

index   Something
0       a
1       b
2       c

在我的第二次处决中:

index   Something
0       a
1       b
2       c
3       a
4       b
5       c

但是,当我在第二个 df.to_sql 命令中将索引设置为 True 时(将其转换为 df.to_sql('AReg', engine, index = True, if_exists='append')), 两次执行后我的数据库最终看起来像:

index   Something
0       a
1       b
2       c
0       a
1       b
2       c

我做了一些研究,但找不到让索引自动增加的方法。我考虑过在每次执行时读取 anual 数据库,然后调整我的数据帧的索引以适应它,但我的数据库很容易变得非常庞大,这会使它的执行速度慢得离谱(并且还禁止我在两台计算机上同时执行相同的数据分析而没有破坏我的索引)。

那么使该索引发挥作用的最佳解决方案是什么?我在这里缺少什么?

最佳答案

尽管 Pandas 有很多导出选项,但其主要目的并不是用作数据库管理 api。管理索引通常是数据库应该处理的事情。

我建议设置 index=False, if_exists='append' 并创建具有自动递增索引的表:

CREATE TABLE AReg (
     id INT NOT NULL AUTO_INCREMENT,
     # your fields here
     PRIMARY KEY (id)
);

关于python - Pandas to_sql - 在附加 DataFrame 时增加表的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54808848/

相关文章:

python-3.x - 'utf- 8' codec can' t 解码位置 10 中的字节 0xb5 : invalid start byte

python-3.x - 如何在列上应用函数

python - paramiko.SSHException : Channel closed 异常

python - Gdk:如何从 Python 中的事件掩码中删除位?

mysql - mysql如何比较同一张表中不同列的不同行

php - MySQL - 从 url ID 选择行值

python - Pandas series.map 将值更改为 NaN

python - Python 内存管理是如何工作的?

python - 每天重新采样到每月一次,并在 pandas 中偏移 'month-end minus t days'

mysql - 根据其他表值选择 GROUP BY 的 ID