如何在sqlalchemy中将select_从对象转换为新表

2024-06-16 09:21:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据库,其中包含两个表:cdrmtr。我希望基于ego_idalter_id列将这两个列连接起来,并将其输出到同一数据库中的另一个表中,使用列名完成,,而不使用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(...)

但我有两个问题:

  • 当我开始处理完整的数据库时,将所有内容加载到数据帧中需要太多内存
  • 列名(显然)不包括在results中,需要由results[0].keys()访问

我已经检查了另一个stackoverflow question,但它使用sqlalchemy的ORM框架,不幸的是我不理解。如果有更简单的方法(比如熊猫),我想这会更容易

最简单的方法是什么


Tags: columnsid数据库truetablekeysqueryresults
1条回答
网友
1楼 · 发布于 2024-06-16 09:21:22

所以我通过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)

不过,查询字符串似乎对括号高度敏感。如果我用括号括住整个SELECT...FROM...语句,它就不起作用了

相关问题 更多 >