PandasDataFrame.to_sql()不再与sqlalchemy 2.0.1引擎一起工作,connect()作为上下文管理器,不会抛出任何错误

ltskdhd1  于 2023-02-07  发布在  其他
关注(0)|答案(1)|浏览(212)

pandas1.5.3sqlalchemy2.0.1的代码不再工作,令人惊讶的是,它没有引发任何错误,代码静默通过:

# python 3.10.6
import pandas as pd # 1.5.3
import psycopg2 # '2.9.5 (dt dec pq3 ext lo64)'
from sqlalchemy import create_engine # 2.0.1

def connector():
    return psycopg2.connect(**DB_PARAMS)

engine = create_engine('postgresql+psycopg2://', creator=connector)

with engine.connect() as connection:
    df.to_sql(
        name='my_table',
        con=connection,
        if_exists='replace',
        index=False,
    )

目前,使用sqlalchemy 2.0.1时,我的表不再填充DataFrame内容。
而它被正确地填充了1.4.45版本的sqlalchemy。

编辑

显然,当我***不***使用上下文管理器时,它可以工作:

connection = engine.connect()

res.to_sql(
    name='my_table',
    con=connection,
    if_exists='replace',
    index=False
)
Out[2]: 133 # <- wondering what is this return code '133' here?

connection.commit()
connection.close()

我怎样才能让它与上下文管理器(又名with语句)一起工作呢?

bkhjykvo

bkhjykvo1#

您正在使用的上下文管理器在退出时回滚,而使用engine.begin(),它将提交。

with engine.begin() as connection:
    df.to_sql(
        name='my_table',
        con=connection,
        if_exists='replace',
        index=False,
    )

相关问题