所以我从数据库中下载了一些数据,这些数据方便地具有顺序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
答案 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']})