如何在SQLAlchemy中将select_from对象转换为新表

时间:2019-10-27 14:26:17

标签: python sqlalchemy

我有一个数据库,其中包含两个表cdrmtr。我想要基于列ego_idalter_id的两者的联接,并且我希望将此列输出到同一数据库中的另一个表中,并以列名完整,而不使用< / em> pandas

这是我当前的代码:

mtr_table = Table('mtr', MetaData(), autoload=True, autoload_with=engine)
print(mtr_table.columns.keys())

cdr_table = Table('cdr', MetaData(), autoload=True, autoload_with=engine)
print(cdr_table.columns.keys())

query = db.select([cdr_table])
query = query.select_from(mtr_table.join(cdr_table,
        ((mtr_table.columns.ego_id == cdr_table.columns.ego_id) &
            (mtr_table.columns.alter_id == cdr_table.columns.alter_id))),
    )

results = connection.execute(query).fetchmany()

当前,对于我的测试代码,我要做的是将结果转换为熊猫数据框,然后将其放回原始SQL数据库中:

df = pd.DataFrame(results, columns=results[0].keys())
df.to_sql(...)

但是我有两个问题:

  • 当我开始使用完整的数据库时,将所有内容加载到pandas数据框中将需要太多内存
  • (显然)列名未包含在results中,并且需要results[0].keys()来访问

我已经检查了其他stackoverflow question,但是它使用了sqlalchemy的ORM框架,很遗憾,我不理解。如果有更简单的方法(例如熊猫的to_sql),我认为这样做会更容易。

最简单的方法是什么?

1 个答案:

答案 0 :(得分:0)

所以我发现了如何通过TVar来做到这一点:

CREATE TABLE AS

查询字符串似乎对括号非常敏感。如果我用括号括起整个query = """ CREATE TABLE mtr_cdr AS SELECT mtr.idx,cdr.* FROM mtr INNER JOIN cdr ON (mtr.ego_id = cdr.ego_id AND mtr.alter_id = cdr.alter_id)""".format(new_table) with engine.connect() as conn: conn.execute(query) 语句,则它不起作用。