Sqlite查询返回不同类的不同结果

时间:2013-12-03 14:34:13

标签: python sqlite

我有一个从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()返回一个空集合。这两个文件中的代码不会同时运行,我在不同的时间运行脚本,因此任何时候都不应该有多个连接(如果这样做会产生影响)。

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

1 个答案:

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