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

Python 如何在sqlalchemy中将select_从对象转换为新表,python,sqlalchemy,Python,Sqlalchemy,我有一个数据库,其中包含两个数据表,cdr和mtr。我希望根据列ego\u id和alter\u id将这两个列连接起来,并将其输出到同一数据库中的另一个表中,包括列名,而不使用pandas 以下是我当前的代码: mtr_table = Table('mtr', MetaData(), autoload=True, autoload_with=engine) print(mtr_table.columns.keys()) cdr_table = Table('cdr', MetaData(),

我有一个数据库,其中包含两个数据表,
cdr
mtr
。我希望根据列
ego\u id
alter\u 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(...)
但我有两个问题:

  • 当我开始处理完整的数据库时,将所有内容加载到数据帧中需要太多内存
  • 列名称(显然)不包括在
    结果中,需要由
    结果[0]访问。keys()
我检查了另一个,但它使用sqlalchemy的ORM框架,不幸的是,我不理解。如果有一种更简单的方法(比如pandas'to_sql),我想这会更容易


最简单的方法是什么?

因此,我通过
创建表为
了解了如何做到这一点:

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…
语句,它就不起作用了