SQLAlchemy核心engine.execute()与connection.execute()

Max*_*Max 6 python database sqlalchemy

我正在 Python 中使用 SQLAlchemy 核心,并且我已多次阅读文档,但仍然需要有关engine.execute()vs的澄清connection.execute()

据我了解,engine.execute()与doing相同connection.execute(),后面跟着connection.close()

我遵循的教程让我可以在我的代码中使用它:

脚本中的初始设置

try:
    engine = db.create_engine("postgres://user:pass@ip/dbname", connect_args={'connect_timeout': 5})
    connection = engine.connect()
    metadata = db.MetaData()
except exc.OperationalError:
    print_error(f":: Could not connect to {db_ip}!")
    sys.exit()
Run Code Online (Sandbox Code Playgroud)

然后,我有处理数据库访问的函数,例如:

def add_user(a_username):
    query = db.insert(table_users).values(username=a_username)
    connection.execute(query)
Run Code Online (Sandbox Code Playgroud)

我应该connection.close()在脚本结束之前打电话吗?或者它本身处理得足够有效吗?我最好在 结束时关闭连接add_user(),还是效率低下?

如果我确实需要connection.close()在脚本结束之前调用,这是否意味着中断脚本会导致我的 Postgres DB 上的连接挂起?

Flo*_*sch 1

我发现这篇文章有助于更好地理解 sqlalchemy 中的不同交互范例,以防您还没有阅读过它。

关于您关于何时关闭数据库连接的问题:为每个语句执行创建和关闭连接确实非常低效。但是,您应该确保您的应用程序的全局流中没有连接泄漏。