我有一个存储库类,可以从SQLite数据库返回数据。这是一个基本示例:

class FeedbackRepository:
    def __init__(self):
        self.connection = sqlite3.connect('feedback.db')
        self.cursor = self.connection.cursor()
        self.setupDatabase()

    def setupDatabase(self):
        sql = """
                  CREATE TABLE IF NOT EXISTS FeedbackEntries
                  (
                      id TEXT NOT NULL,
                      rep TEXT,
                      rating TEXT NOT NULL
                  )
              """
        self.cursor.execute(sql)
        self.connection.commit()

    def getAllFeedback(self):
        sql = """SELECT * FROM FeedbackEntries"""
        self.cursor.execute(sql)
        data = self.cursor.fetchall()
        return [self._getFeedbackEntryModelFromRow(row) for row in data]

我正在以两个不同的方式创建此类的实例 .py 文件,每次我打电话 getAllFeedback(). 。在一个文件中,所有反馈都从数据库查询返回。第二个文件,从 cursor.fetchall(). 。来自两个文件的代码不会同时运行,我在单独的时间运行脚本,因此任何时间都不应有一个以上的连接(甚至有所作为)。

我不知道这是怎么发生的,尤其是因为两个脚本都使用相同的代码?

有帮助吗?

解决方案

您正在使用相对路径 sqlite3.connect() 称呼;这意味着数据库文件的确切位置取决于当前的工作目录。如果您从其他位置执行脚本,则将重新创建数据库文件。

改用绝对路径;您可以将模块位置的位置以:

import os

_module_directory = os.path.dirname(os.path.abspath(__file__))

然后:

self.connection = sqlite3.connect(os.path.join(_module_directory, 'feedback.db'))
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top