يعيد استعلام 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]

أقوم بإنشاء مثيل لهذه الفئة في اثنين مختلفين .py الملفات ، وفي كل مرة أتصل بها getAllFeedback(). في ملف واحد ، يتم إرجاع جميع التعليقات من استعلام قاعدة البيانات. الملف الثاني ، يعيد مجموعة فارغة من cursor.fetchall(). لا يتم تشغيل الرمز من الملفين بشكل متزامن ، فأنا أقوم بتشغيل البرامج النصية في وقت منفصل ، وبالتالي يجب ألا يكون هناك أبدًا أكثر من اتصال واحد في أي وقت (إذا كان ذلك يحدث فرقًا).

ليس لدي أي فكرة عن كيفية حدوث ذلك ، خاصة وأن كلا النصوص تستخدمان نفس الرمز؟

هل كانت مفيدة؟

المحلول

أنت تستخدم مسارًا نسبيًا في 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