通过python连接Sqlite数据库
from sqlite3 import connect
class Sqlite:
def __init__(self, db):
self.db = db
self.connection = None
self.row_factory = None
def _connect(self):
self.connection = connect(self.db)
self.row_factory = self.connection.row_factory
def connect(self):
try:
if self.connection:
pass
else:
self._connect()
except Exception as e:
print(f"连接Sqlite数据库:{self.db}失败!异常信息:{e.args[0]}")
raise
def execute(self, sql, values=()):
self.connect()
row = []
try:
cur = self.connection.cursor()
cur.execute(sql, values)
row = cur.fetchall()
self.connection.commit()
cur.close()
except Exception as e:
print(f"执行sql语句失败:{sql}!异常信息:{e.args[0]}")
self.connection.rollback()
raise
finally:
self.close()
return row
def executemany(self, sql, values=()):
"""根据序列重复执行 SQL 语句"""
self.connect()
try:
cur = self.connection.cursor()
cur.executemany(sql, values)
self.connection.commit()
cur.close()
except Exception as e:
print(f"执行sql语句失败:{sql}!异常信息:{e.args[0]}")
raise
finally:
self.close()
def executescript(self, script):
"""执行 SQL 脚本"""
self.connect()
try:
cur = self.connection.cursor()
cur.executescript(script)
self.connection.commit()
cur.close()
except Exception as e:
print(f"执行sql脚本失败:{script}!异常信息:{e.args[0]}")
raise
finally:
self.close()
@staticmethod
def _dict_factory(cursor, row):
d = {}
for index, col in enumerate(cursor.description):
d[col[0]] = row[index]
return d
def execute_dict(self, sql, values=()):
self.connect()
row = {}
try:
self.connection.row_factory = Sqlite._dict_factory
cur = self.connection.cursor()
cur.execute(sql, values)
row = cur.fetchall()
cur.close()
except Exception as e:
print(f"执行sql语句失败:{sql}!异常信息:{e.args[0]}")
raise
finally:
self.connection.row_factory = self.row_factory
self.close()
return row
def close(self):
if self.connection:
self.connection.close()
self.connection = None