SqlAlchemy:引擎和连接管理

时间:2016-12-08 15:55:57

标签: python sqlalchemy

这两项工作都是:

sel = select([self.tbl])
rec = self.engine.execute(sel)

sel = select([self.tbl])
conn = self.engine.connect()
rec = conn.execute(sel)

底层差异是什么?

1 个答案:

答案 0 :(得分:0)

根据the docs

  • 关于connect()
  

可以直接使用引擎向数据库发出SQL。最通用的方法是首先获取连接资源,您可以通过Engine.connect()方法获得:

connection = engine.connect()
result = connection.execute("select username from users")
for row in result:
    print("username:", row['username'])
connection.close()
  

连接是Connection的一个实例,它是一个代理对象   用于实际的DBAPI连接。从中检索DBAPI连接   连接池创建Connection时的连接池。

  • 关于execute()
  

可以使用Engine本身的execute()方法以速记方式执行上述过程:

result = engine.execute("select username from users") for row in result:
    print("username:", row['username'])
  

在上面,execute()方法获取一个新的Connection   拥有,执行声明   使用该对象,并返回ResultProxy。在这种情况下,   ResultProxy包含一个称为close_with_result的特殊标志   表示当其底层DBAPI游标关闭时,   连接对象本身也是关闭的,它再次返回DBAPI   连接到连接池,释放事务资源。