将 SQLite 3 与 python 一起使用
using SQLite 3 with python
我正在尝试在我的 python 3 程序中实现一个数据库。我正在使用 SQLite 3。我真的不明白如何使用我的 DBHelper class.
为了使用我的 DBHelper,我需要实例化一个 DBHelper 对象并调用一个函数(插入等)。但是,每次我实例化一个对象时,都会与我的数据库建立一个新连接。
我很困惑,因为看起来我多次连接到数据库,而我觉得我应该只在程序开始时连接一次。但是如果我不实例化一个DBHelper对象,我就不能使用我需要的功能。
像这样的多个连接有时也会锁定我的数据库。
在我的程序中实现 SQLite 的正确方法是什么?
编辑:我需要在多个其他 classes
中使用相同的 sql 数据库文件
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__
它都会 return 相同的连接。有关更多信息,请访问 here。
请记住,如果您使用并发工作流访问连接,则必须在 DBHelper
中实现对数据库连接的安全访问。阅读 SQLite documents 了解更多信息。
我正在尝试在我的 python 3 程序中实现一个数据库。我正在使用 SQLite 3。我真的不明白如何使用我的 DBHelper class.
为了使用我的 DBHelper,我需要实例化一个 DBHelper 对象并调用一个函数(插入等)。但是,每次我实例化一个对象时,都会与我的数据库建立一个新连接。
我很困惑,因为看起来我多次连接到数据库,而我觉得我应该只在程序开始时连接一次。但是如果我不实例化一个DBHelper对象,我就不能使用我需要的功能。
像这样的多个连接有时也会锁定我的数据库。
在我的程序中实现 SQLite 的正确方法是什么?
编辑:我需要在多个其他 classes
中使用相同的 sql 数据库文件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__
它都会 return 相同的连接。有关更多信息,请访问 here。
请记住,如果您使用并发工作流访问连接,则必须在 DBHelper
中实现对数据库连接的安全访问。阅读 SQLite documents 了解更多信息。