SQLiteクエリは、異なるクラスから異なる結果を返します

StackOverflow https://stackoverflow.com/questions/20353964

  •  25-08-2022
  •  | 
  •  

質問

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]

私はこのクラスのインスタンスを2つの異なるもので作成しています .py ファイル、そして私が電話するたびに getAllFeedback(). 。 1つのファイルでは、すべてのフィードバックがデータベースクエリから返されます。 2番目のファイルは、から空のコレクションを返します cursor.fetchall(). 。 2つのファイルのコードは同時に実行されないため、スクリプトを別々に実行するため、いつでも複数の接続があるべきではありません(違いがある場合)。

特に両方のスクリプトが同じコードを使用しているので、これがどのように起こるかわかりませんか?

役に立ちましたか?

解決

で相対パスを使用しています 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