python - Pandas to_sql - 附加 DataFrame 时增加表的索引
问题描述
我一直致力于开发一种产品,该产品以日常执行数据分析 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
函数的参数中看到的那样,我没有为年度数据库设置索引。但是,我的经理要求我这样做,创建一个以简单规则为中心的索引:它将是一个自动递增的数字索引,它会自动为数据库中保存的与其位置相对应的每一行分配一个数字。
所以基本上,我第一次保存df
时,数据库应该是这样的:
index Something
0 a
1 b
2 c
在我的第二次执行中:
index Something
0 a
1 b
2 c
3 a
4 b
5 c
但是,当我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
我做了一些研究,但找不到允许索引自动增加的方法。我考虑在每次执行时读取年度数据库,然后调整我的数据帧的索引,但我的数据库很容易变得非常庞大,这将使其执行速度非常慢(并且还禁止我在两台计算机上同时执行相同的数据分析而不损害我的索引)。
那么使这个索引工作的最佳解决方案是什么?我在这里想念什么?
解决方案
尽管 Pandas 有很多导出选项,但它的主要目的并不是用作数据库管理 API。管理索引通常是数据库应该处理的事情。
我建议index=False, if_exists='append'
使用自动增量索引设置和创建表:
CREATE TABLE AReg (
id INT NOT NULL AUTO_INCREMENT,
# your fields here
PRIMARY KEY (id)
);
推荐阅读
- tensorflow - 预期 conv2d_7 的形状为 (220, 220, 1) 但得到的数组形状为 (224, 224, 1)
- mysql - 如何在 SQL 中进行数据透视
- apache-spark-sql - 如何在 Spark 2.3 中将项目附加到数组
- java - 使用类似于数组的位置括号制作对象
- python - 需要在以下输出中从“a”标签中获取“href”值
- python - 创建一个点击后会自动发送电子邮件的文件?
- dart - 问题是什么?LoginScreen 中的共享首选项并非每次都有效
- php - wp_register_style() 和 wp_enqueue_style 之间的区别
- ios - 闭包内的返回语句
- php - 正则表达式,RegEx,用于验证 php 中的复杂字符串