Domanda

Ho una classe di repository che restituisce i dati da un database SQLite. Ecco un esempio di base:

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]

Sto creando un'istanza di questa classe in due diversi .py file e ogni volta che chiamo getAllFeedback(). In un file, tutto il feedback viene restituito dalla query del database. Il secondo file, restituisce una raccolta vuota da cursor.fetchall(). Il codice dei due file non esegue contemporaneamente, eseguo gli script in tempo separato, e quindi non dovrebbe mai esserci più di una connessione in qualsiasi momento (se ciò fa anche la differenza).

Non ho idea di come ciò possa accadere, soprattutto perché entrambi gli script stanno usando lo stesso codice?

È stato utile?

Soluzione

Stai usando un percorso relativo in sqlite3.connect() chiamata; Ciò significa che la posizione esatta del file di database dipende dalla directory di lavoro corrente. Se si esegue lo script da una posizione diversa, il file di database verrà ricreato.

Usa invece un percorso assoluto; Puoi basarlo della posizione del modulo con:

import os

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

poi:

self.connection = sqlite3.connect(os.path.join(_module_directory, 'feedback.db'))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top