Vra

Ek het 'n bewaarplekklas wat data vanaf 'n SQLite -databasis terugstuur. Hier is 'n basiese voorbeeld:

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]

Ek skep 'n voorbeeld van hierdie klas in twee verskillende .py lêers, en elke keer as ek bel getAllFeedback(). In een lêer word al die terugvoer teruggestuur uit die databasisnavraag. Die tweede lêer, gee 'n leë versameling van die cursor.fetchall(). Die kode van die twee lêers loop nie gelyktydig nie, ek voer die skrifte op aparte tydstip uit, en daar moet dus nooit meer as een verbinding op enige tydstip wees nie (as dit selfs 'n verskil maak).

Ek het geen idee hoe dit kan gebeur nie, veral omdat albei skrifte dieselfde kode gebruik?

Was dit nuttig?

Oplossing

U gebruik 'n relatiewe pad in die sqlite3.connect() bel; Dit beteken dat die presiese ligging van die databasislêer afhang van die huidige werkgids. As u die skrip vanaf 'n ander plek uitvoer, sal die databasislêer weer geskep word.

Gebruik eerder 'n absolute pad; U kan dit baseer op die ligging van die module met:

import os

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

dan:

self.connection = sqlite3.connect(os.path.join(_module_directory, 'feedback.db'))
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top