首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不重复连接部分的情况下设计Python / SQLite应用程序的正确方法是什么?

在不重复连接部分的情况下设计Python / SQLite应用程序的正确方法是什么?
EN

Stack Overflow用户
提问于 2022-09-03 13:06:47
回答 1查看 45关注 0票数 -1

我试图开发一个简单的应用程序,将多个业务对象保存到sqlite数据库中。我有几个业务对象,我想为其编写保存/更新/删除方法。对于这些类中的每个类和方法,我总是创建一个新的连接。例如:

代码语言:javascript
复制
import sqlite3
db = "mydb.db"

class BusinessObject1:
    ...
    def save_to_db(self, db):
        conn = sqlite3.connect(db)
        cur = conn.cursor()
        with conn:
            cur.execute("...")

    def delete_from_db(self, db):
        conn = sqlite3.connect(db)
        cur = conn.cursor()
        with conn:
            cur.execute("...")

class BusinessObject2:
    ...
    def save_to_db(self, db):
        conn = sqlite3.connect(db)
        cur = conn.cursor()
        with conn:
            cur.execute("...")

    def delete_from_db(self, db):
        conn = sqlite3.connect(db)
        cur = conn.cursor()
        with conn:
            cur.execute("...")

它感觉不像是一个好的设计解决方案(不是干燥的)。有人能提出一个更好的设计吗?我有大约20个业务对象和4-8个方法和一个记录表,其中包括所有这些对象。每次输入conn=sqlite3.connect(db)并不是正确的方法。如果我决定改为MySQL或PostgreSQL,我需要重构整个项目。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-09-03 17:39:00

然后,您可能希望将连接处理程序从类对象中分离出来,或者可以像上面的注释那样做,建议将连接放在类构造函数中。

如果由于某种原因不能同时执行这两项操作,那么仍然可以向类中添加一个staticmethod来处理连接。这并不理想,但仍然比你的解决方案更好:

代码语言:javascript
复制
@staticmethod
def create_connection(db_file):

    conn = None

    try:
        with sqlite3.connect(db_file) as conn:
            return conn
    except sqlite3.Error as e:
        print("Can't connect to database, error:", e, sep="\n")

    return conn

然后向其他方法添加一个参数,即返回的create_connection方法:

代码语言:javascript
复制
def save_to_db(self, connection):
        cur = connection.cursor()
        cur.execute("...")

通过这种方式,可以将连接对象与类对象分开:

代码语言:javascript
复制
if __name__ == "__main__":
    conn = BusinessObject1.create_connection(db)

    b1 = BusinessObject1(...)
    b1.save_to_db(conn)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73592472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档