pandas读取sql查询改进

时间:2016-06-02 17:00:17

标签: pandas sqlalchemy

所以我从数据库中下载了一些数据,这些数据方便地具有顺序ID列。我将查询的每个表的最大ID保存到我读入内存的小文本文件中(max_ids dataframe)。

我正在尝试创建一个查询,我会说给我所有的数据,其中Idcol>该表的max_id。我得到错误,系列是可变的,所以我不能在参数中使用它们。下面的代码最终工作,但它实际上只是一个猜测和检查过程。我把它变成了一个int然后是一个字符串,它基本上从数据帧中提取了实际值。

这是在我为大约32个不同的表复制之前完成我想要做的事情的正确方法吗?我希望始终能够只从这些表中获取最新数据,然后我将这些数据写入pandas并最终整合并导出到另一个数据库。

df= pd.read_sql_query('SELECT * FROM table WHERE Idcol > %s;', engine, params={'max_id', str(int(max_ids['table_max']))})

我是否也可以使表名更具动态性?我需要查看表格列表。数据库是MS SQL,我使用的是pymssql和sqlalchemy。

以下是我运行max_ids ['table_max']:

的示例
Out[11]:
0    1900564174
Name: max_id, dtype: int64

1 个答案:

答案 0 :(得分:2)

假设您的max_ids DF看起来如下:

In [24]: max_ids
Out[24]:
   table  table_max
0  tab_a      33333
1  tab_b     555555
2  tab_c   66666666

你可以这样做:

qry = 'SELECT * FROM {} WHERE Idcol > :max_id'

for i, r in max_ids.iterrows():
    print('Executing: [%s], max_id: %s' %(qry.format(r['table']), r['table_max']))
    pd.read_sql_query(qry.format(r['table']), engine, params={'max_id': r['table_max']})