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

时间:2019-01-12 18:35:07

标签: python database sqlalchemy

我正在使用Python中的SQLAlchemy核心,并且阅读了许多文档,但仍然需要对engine.execute()connection.execute()进行澄清。

据我了解,engine.execute()与执行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()

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

def add_user(a_username):
    query = db.insert(table_users).values(username=a_username)
    connection.execute(query)

我应该在脚本结束之前打电话给connection.close()吗?还是仅凭自身足够有效地处理?我最好在add_user()结尾关闭连接,还是效率低下?

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

1 个答案:

答案 0 :(得分:0)

我发现this post有助于更好地了解sqlalchemy中的不同交互方式,以防您尚未阅读。

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