将pandas dataframe作为参数传递给mysql查询

时间:2015-06-16 16:42:51

标签: python mysql pandas

我有一个pandas数据帧df,看起来像:

df = pd.DataFrame({'SEC1':['IBM','CSCO','MSFT','AMZN' ], 'SEC2':['GOOG', 'INTC', 'ABX', 'CREE'], 'HOUR':[10 ,10 ,15, 12], 'Size':[100 ,200 ,50 ,500],'Price':[300 ,25 ,150, 80] })

df = df[['SEC1', 'SEC2', 'HOUR', 'Size', 'Price']]

我有一个很大的mysql表(name = Table-B),我想用我的数据帧进行左连接。我一直在阅读pandas文档,但我不清楚如何在没有首先阅读(通过read_sql / read_table)表-B到数据帧的情况下如何做到这一点。我不想将大型表加载到pandas中,然后将其连接到df,这将返回表B中的一小部分行。有没有办法将dataframe df作为read_sql中的对象/参数传递。

如果我在mysql中执行此操作,代码看起来像这样,其中Table-A是我上面的数据框:

select * from  Table-A a
left join Table-B b
on (a.sec1 = b.sec1)
where DATE_SUB(CURDATE(),INTERVAL 12 MONTH) <= dt
group by 1,2,3,4,5,6,7

1 个答案:

答案 0 :(得分:1)

您可以使用df.to_sql

storyboard加载到数据库表中
df

然后在数据库中执行连接,并使用read_sql将结果读入新的DataFrame:

df.to_sql(tablename, engine, if_exists='replace')

例如,使用SQLAlchemy:

sql = '''select * from  Table-A a
         left join Table-B b
         on (a.sec1 = b.sec1)
         where DATE_SUB(CURDATE(),INTERVAL 12 MONTH) <= dt
         group by 1,2,3,4,5,6,7'''
result = pd.read_sql(sql, engine)