项目中有两个进程操作sqlite, 会遇到同时写的情况,频繁出现database is locked的情况,怎么解决?
下面是我操作sqlite数据库的工具类
class SqliteTool():
"""
sqlite数据库工具类
"""
def __init__(self, dbName="data.db"):
"""
初始化连接——使用完需关闭连接
:param dbName: 连接库的名字,注意,以'.db'结尾
"""
# 连接数据库
self._conn = sqlite3.connect(dbName)
self._conn.row_factory = dict_factory
# 创建游标
self._cur = self._conn.cursor()
# 查询多条数据
def query_many(self, sql: str, params=None):
"""
查询多条数据
:param sql: select语句
:param params: 查询参数,形如()
:return: 语句查询多条结果
"""
try:
if params:
self._cur.execute(sql, params)
else:
self._cur.execute(sql)
# 调用fetchall()方法
r = self._cur.fetchall()
print("[select many records success]")
return r
except Exception as e:
print("[select many records error]", e)
# 插入或更新表数据,一次插入或更新一条数据
def operate_one(self, sql: str, value: tuple):
"""
插入或更新单条表记录
:param sql: insert语句或update语句
:param value: 插入或更新的值,形如()
:return: True表示插入或更新成功
"""
try:
self._cur.execute(sql, value)
self._conn.commit()
if 'INSERT' in sql.upper():
print("[insert one record success]")
if 'UPDATE' in sql.upper():
print("[update one record success]")
return True
except Exception as e:
self._conn.rollback()
return False