Ped*_*uza 7 python mysql sqlalchemy dataframe pandas
我一直致力于开发一种产品,该产品以数据分析 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
Run Code Online (Sandbox Code Playgroud)
正如您在我的第二个to_sql函数的参数中看到的那样,我没有为 anual 数据库设置索引。但是,我的经理要求我这样做,创建了一个以一个简单规则为中心的索引:它将是一个自动递增的数字索引,它会自动为数据库中保存的每一行与其位置相对应的行赋予一个数字。
所以基本上,我第一次保存时df,数据库应该是这样的:
index Something
0 a
1 b
2 c
Run Code Online (Sandbox Code Playgroud)
在我的第二次执行中:
index Something
0 a
1 b
2 c
3 a
4 b
5 c
Run Code Online (Sandbox Code Playgroud)
但是,当我True在第二个df.to_sql命令中将索引设置为时(将其转换为df.to_sql('AReg', engine, index = True, if_exists='append')),两次执行后,我的数据库最终看起来像:
index Something
0 a
1 b
2 c
0 a
1 b
2 c
Run Code Online (Sandbox Code Playgroud)
我做了一些研究,但找不到允许索引自动增加的方法。我考虑过在每次执行时读取年度数据库,然后调整我的数据帧的索引,但我的数据库很容易变得非常庞大,这会使它的执行速度非常慢(并且还禁止我在两台计算机上同时执行相同的数据分析而无需危及我的索引)。
那么使该索引起作用的最佳解决方案是什么?我在这里缺少什么?
tvg*_*iek 10
尽管 Pandas 有很多导出选项,但它的主要目的并不是用作数据库管理 api。管理索引通常是数据库应该处理的事情。
我建议index=False, if_exists='append'使用自动增量索引设置和创建表:
CREATE TABLE AReg (
id INT NOT NULL AUTO_INCREMENT,
# your fields here
PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6946 次 |
| 最近记录: |