Pregunta

Tengo una clase de repositorio que devuelve datos de una base de datos SQLite. Aquí hay un ejemplo básico:

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]

Estoy creando una instancia de esta clase en dos diferentes .py archivos, y cada vez que llamo getAllFeedback(). En un archivo, todos los comentarios se devuelven de la consulta de la base de datos. El segundo archivo, devuelve una colección vacía del cursor.fetchall(). El código de los dos archivos no se ejecuta simultáneamente, ejecuto los scripts en un momento separado, por lo que nunca debe haber más de una conexión en ningún momento (si eso incluso marca la diferencia).

No tengo idea de cómo podría suceder esto, especialmente porque ambos scripts están usando el mismo código.

¿Fue útil?

Solución

Estás usando una ruta relativa en el sqlite3.connect() llamar; Esto significa que la ubicación exacta del archivo de la base de datos depende del directorio de trabajo actual. Si ejecuta el script desde una ubicación diferente, el archivo de la base de datos se recreará.

Use una ruta absoluta en su lugar; Puede basarlo en la ubicación del módulo con:

import os

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

después:

self.connection = sqlite3.connect(os.path.join(_module_directory, 'feedback.db'))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top