簡體   English   中英

在 python 中使用 SQLite 3

[英]using SQLite 3 with python

我正在嘗試在我的 python 3 程序中實現一個數據庫。 我正在使用 SQLite 3。我真的不明白如何使用我的 DBHelper 類。

為了使用我的 DBHelper,我需要實例化一個 DBHelper 對象並調用一個函數(插入等)。 但是,每次我實例化一個對象時,都會建立一個到我的數據庫的新連接。

我很困惑,因為看起來我多次連接到數據庫,而我覺得我應該只在程序開始時連接一次。 但是如果我不實例化一個 DBHelper 對象,我就不能使用我需要的函數。

像這樣的多個連接有時也會鎖定我的數據庫。

在我的程序中實現 SQLite 的正確方法是什么?

編輯:我需要在多個其他類中使用相同的 sql db 文件

import sqlite3


class DBHelper:
    def __init__(self, dbname="db.sqlite"):
        self.dbname = dbname
        try:
            self.conn = sqlite3.connect(dbname)
        except sqlite3.Error as e:
            log().critical('local database initialisation error: "%s"', e)

    def setup(self):
        stmt = "CREATE TABLE IF NOT EXISTS users (id integer PRIMARY KEY)"
        self.conn.execute(stmt)
        self.conn.commit()

    def add_item(self, item):
        stmt = "INSERT INTO users (id) VALUES (?)"
        args = (item,)
        try:
            self.conn.execute(stmt, args)
            self.conn.commit()
        except sqlite3.IntegrityError as e:
            log().critical('user id ' + str(item) + ' already exists in database')

    def delete_item(self, item):
        stmt = "DELETE FROM users WHERE id = (?)"
        args = (item,)
        self.conn.execute(stmt, args)
        self.conn.commit()

    def get_items(self):
        stmt = "SELECT id FROM users"
        return [x[0] for x in self.conn.execute(stmt)]

您可以在代碼中使用singleton設計模式。 您將連接實例化一次,每次調用__init__它都會返回相同的連接。 如需更多信息,請訪問此處

請記住,如果您使用並發工作流訪問連接,則必須在DBHelper實現對數據庫連接的安全訪問。 閱讀SQLite 文檔以獲取更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM