我正在重写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'
方法对我不起作用。
我很高兴构建一个简单的代码示例,如果这会有所帮助,但这更像是一个架构/样式/策略级问题,而不是实际的编码语法问题。
我很感激任何建议/指导。