我想编写一个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()

我对数据库没有太多的经验,所以我希望能解释一下为什么一种方法比另一种方法更受欢迎。

最佳答案

您可以重复使用同一连接您还可以将连接(和光标)用作上下文管理器,这样您就不需要显式地在其中任何一个上调用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会话才能连接到远程数据库。)

关于python - 我应该为每个Sqlite3事务调用connect()和close()吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27829010/

10-14 02:18