作者:serafina捡到一枚人鱼 | 来源:互联网 | 2023-05-27 20:10
我想编写一个Python模块来抽象出我的应用程序的数据库事务.我的问题是我是否需要打电话connect()
和close()
每笔交易?在代码中:
import sqlite3
# Can I put connect() here?
cOnn= sqlite3.connect('db.py')
def insert(args):
# Or should I put it here?
cOnn= sqlite3.connect('db.py')
# Perform the transaction.
c = conn.cursor()
c.execute(''' insert args ''')
conn.commit()
# Do I close the connection here?
conn.close()
# Or can I close the connection whenever the application restarts (ideally, very rarely)
conn.close()
我对数据库的经验不多,所以我很欣赏为什么一种方法优于另一种方法的解释.
1> chepner..:
您可以重复使用相同的连接.您还可以使用连接(和游标)作为上下文管理器,这样您就不需要显式调用它们close
.
def insert(conn, args):
with conn.cursor() as c:
c.execute(...)
conn.commit()
with connect('db.py') as conn:
insert(conn, ...)
insert(conn, ...)
insert(conn, ...)
没有理由关闭与数据库的连接,每次重新打开连接可能很昂贵.(例如,您可能需要建立TCP会话以连接到远程数据库.)