Die SQLite -Abfrage gibt verschiedene Ergebnisse aus verschiedenen Klassen zurück

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

  •  25-08-2022
  •  | 
  •  

Frage

Ich habe eine Repository -Klasse, die Daten aus einer SQLite -Datenbank zurückgibt. Hier ist ein grundlegendes Beispiel:

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]

Ich erstelle eine Instanz dieser Klasse in zwei verschiedenen .py Dateien und jedes Mal, wenn ich anrufe getAllFeedback(). In einer Datei wird das gesamte Feedback aus der Datenbankabfrage zurückgegeben. Die zweite Datei gibt eine leere Sammlung von der zurück cursor.fetchall(). Der Code aus den beiden Dateien wird nicht gleichzeitig ausgeführt, ich fiere die Skripte zum separaten Zeitpunkt aus, und so sollte es zu keinem Zeitpunkt mehr als eine Verbindung bestehen (wenn dies überhaupt einen Unterschied macht).

Ich habe keine Ahnung, wie dies passieren könnte, vor allem, da beide Skripte denselben Code verwenden?

War es hilfreich?

Lösung

Sie verwenden einen relativen Weg in der sqlite3.connect() Anruf; Dies bedeutet, dass der genaue Speicherort der Datenbankdatei vom aktuellen Arbeitsverzeichnis abhängt. Wenn Sie das Skript von einem anderen Speicherort ausführen, wird die Datenbankdatei neu erstellt.

Verwenden Sie stattdessen einen absoluten Pfad; Sie können es auf den Ort des Moduls stützen mit:

import os

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

dann:

self.connection = sqlite3.connect(os.path.join(_module_directory, 'feedback.db'))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top