在Pandas.read_sql

时间:2018-06-12 05:18:24

标签: pandas flask-sqlalchemy model-binding

逗人,

我想执行sql查询并在pandas DF中获得结果。 DB是sqlite3,使用flask_sqlalchemy

我有3个与sqlalchemy应用程序绑定的数据库,使用bind关键字创建模型。这里没有问题,在每个数据库文件中都可以很好地创建表。

但是,假设我有3个DB(DB1,DB2,DB3)和每个DB中的一个表(T1,T2 ,, T3)

默认DB是DB1,DB2和DB3是DB1的绑定

我想执行此代码(sql查询是愚蠢的,这只是例如):

    sql = "select T2.ID, sum(T3.val) as val
    FROM T2 INNER JOIN T3 ON T2.ID = T3.ID
    GROUP BY T2.ID"

    df = pd.read_sql(sql, con)

此处的问题是con...

我看过许多使用con = db.get_engine(bind='***')

从一个引擎切换到另一个引擎的示例

但这假设T2和T3在同一个数据库中,情况并非如此

这里我在2个数据库中有2个表,所以如何设置与pandas的连接?

THKS

NB:在真实系统中,一些数据库有数亿行,所以使用SQL然后使用pandas是性能方面最有效的方式,而不是使用sqlalchemy对象,如query,filter,...

1 个答案:

答案 0 :(得分:0)

我不是sqlite的专家,但是在Mysql或Postgresql中,您可以通过在查询中指定数据库的名称来访问数据库/模式中的表。 试试:

sql = "select T2.ID, sum(T3.val) as val
       FROM DB2.T2 
       INNER JOIN DB3.T3 ON T2.ID = T3.ID
       GROUP BY T2.ID"