用mysql正确使用pandas.to_sql

时间:2015-08-26 11:45:28

标签: python mysql sqlalchemy

我正在重写python2.x程序,使用带有两个表的mysql数据库来分析股票价格。

表1:有关每家公司的信息

表2:所有公司的每日股票价格。

在迁移到pandas数据帧时,我发现当与SQL类型数据库连接时,建议使用SQLAlchemy,方法.read_sql_table.to_sql

定义了SQLAlchemy引擎以及所需的两个Table对象的定义后,read_sql_table可以将数据库的内容可靠地读入pandas数据帧。

但是,.to_sql似乎存在许多问题。

1)它需要sql数据库中表的名称参数,而不是定义的Table对象。因此,它会忽略我定义的VARCHAR()类型,并在TEXT时使用if_exists='replace'类型。对我来说,使用列数据类型定义Table对象似乎很奇怪,它不会用于.to_sql

2)如果我还使用dtype参数定义了一个列类型字典,我只能让if_exists='replace'做一些有用的事情。这似乎是一个已知问题,其他地方的建议似乎只是使用if_exists='append',至少在完成更多开发之前。

3)if_exists='append'似乎将整个数据框添加为新行,如果您只想添加新条目,则可以。但我也需要修改现有的条目。

因此,如果我想将表读入数据帧,修改一些条目然后将更改重新写入mysql数据库,是否有一组现有方法或者是可取的方法:

1)将表读入数据帧 2)更改数据框并标记哪些条目已更改 3)仅使用更改的行创建新的数据框 4)通过sqlalchemy

使用原始SQL表达式应用这些更改

我觉得我可能错过了一个pandas数据帧方法,或者现有的if_exists='append'方法对我不起作用。

我很高兴构建一个简单的代码示例,如果这会有所帮助,但这更像是一个架构/样式/策略级问题,而不是实际的编码语法问题。

我很感激任何建议/指导。

0 个答案:

没有答案