문제

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