我正在用PySide编写一个GUI应用程序。它有几个表,通过按下相应的按钮来填充数据库中的数据。
我想在应用程序启动时使用单个数据库连接,并将conn
和cursor
作为变量传递给与数据库有关的任何函数:
import sqlite3
database_fullpath = self.get_database_fullpath()
conn = sqlite3.connect(database_fullpath)
cursor = conn.cursor()
def populate_table(self, conn, cursor):
# do something
也许,我应该在每次需要时连接到数据库:
import sqlite3
def populate_table(self):
database_fullpath = self.get_database_fullpath()
conn = sqlite3.connect(database_fullpath)
cursor = conn.cursor()
# do something
我不确定哪种方法是正确的,以及不同方法的优点是什么。
答案 0 :(得分:0)
一种方法可能是提供一个帮助类,如果可用则重用连接,如果不是则重新连接:
class SqliteDb(object):
def __init__(self, db_fullpath):
self.db_fullpath = db_fullpath
self.conn = None
def connect(self):
self.conn = sqlite3.connect(self.db_fullpath)
def cursor(self, factory=sqlite3.Cursor):
try:
return self.conn.cursor(factory=factory)
except (AttributeError, sqlite3.ProgrammingError):
self.connect()
return self.conn.cursor(factory=factory)
def close(self):
self.conn.close()
然后在你的代码中:
database_fullpath = self.get_database_fullpath()
sqlite_db = SqliteDb(database_fullpath)
cursor = sqlite_db.cursor()