首页 > 解决方案 > SQLAlchemy 2.0 迁移 - 连接到数据库

问题描述

我只是在测试 SQLAlchemy 1.4 库,我注意到在可预见的将来它们会改变某些核心功能。我通常连接到如下所示的数据库,然后他们提到他们将bind在类上删除此方法MetaBase,编写此方法的设定标准是什么?

def output_log(msg):
    connector = create_engine("mylogin")
    metadata = MetaData(bind=connector)
    log = Table("mytable", metadata, autoload=True)
    sess = connector.connect()
    i = insert(log).values({"Message": msg})
    sess.execute(i)
    sess.close()

标签: pythonpython-3.xsqlalchemy

解决方案


对此的更改和背景在“隐式”和“无连接”执行中描述,“绑定元数据”已删除

您可以按如下方式重写代码:

def output_log(msg):
    engine = create_engine("mylogin")
    metadata = MetaData()
    log = Table("mytable", metadata, autoload_with=engine)
    sess = engine.connect()
    i = log.insert().values({"Message": msg})
    sess.execute(i)
    sess.commit()
    sess.close()

或者为了完整性,使用with

    with engine.begin() as sess:
        i = log.insert().values({"Message": msg})
        sess.execute(i)

未来的另一个half选择commit

    with engine.connect() as sess:
        i = log.insert().values({"Message": msg})
        sess.execute(i)
        sess.commit()

推荐阅读