我有一个从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()
返回一个空集合。这两个文件中的代码不会同时运行,我在不同的时间运行脚本,因此任何时候都不应该有多个连接(如果这样做会产生影响)。
我不知道这是怎么发生的,特别是因为两个脚本都使用相同的代码?
答案 0 :(得分:1)
您在sqlite3.connect()
电话中使用相对路径;这意味着数据库文件的确切位置取决于当前工作目录。如果从其他位置执行脚本,则将重新创建数据库文件。
改用绝对路径;你可以用模块的位置来定位它:
import os
_module_directory = os.path.dirname(os.path.abspath(__file__))
然后:
self.connection = sqlite3.connect(os.path.join(_module_directory, 'feedback.db'))