我应该为PySIde应用程序使用单个数据库连接吗?

时间:2016-12-09 04:52:52

标签: python sql database pyside

我正在用PySide编写一个GUI应用程序。它有几个表,通过按下相应的按钮来填充数据库中的数据。

我想在应用程序启动时使用单个数据库连接,并将conncursor作为变量传递给与数据库有关的任何函数:

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

我不确定哪种方法是正确的,以及不同方法的优点是什么。

1 个答案:

答案 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()