封装DbHelper类,实现数据库的增删查改
时间: 2023-08-16 13:05:49 浏览: 110
封装的dbhelper
好的,我可以给你一个简单的例子来演示如何封装DbHelper类,实现数据库的增删查改。
首先,我们需要引入sqlite3模块,它是Python内置的数据库模块。然后我们可以定义一个DbHelper类,包含以下方法:
- __init__(self, db_path): 构造方法,用来初始化数据库连接。
- connect(self): 连接数据库。
- close(self): 关闭数据库连接。
- execute(self, sql, params=None): 执行SQL语句。
- fetch_all(self, sql, params=None): 查询所有结果。
- fetch_one(self, sql, params=None): 查询一条结果。
- insert(self, table_name, data): 插入数据。
- update(self, table_name, data, condition): 更新数据。
- delete(self, table_name, condition): 删除数据。
下面是完整的代码示例:
```python
import sqlite3
class DbHelper:
def __init__(self, db_path):
self.db_path = db_path
self.conn = None
def connect(self):
self.conn = sqlite3.connect(self.db_path)
def close(self):
self.conn.close()
def execute(self, sql, params=None):
cursor = self.conn.cursor()
if params is None:
cursor.execute(sql)
else:
cursor.execute(sql, params)
self.conn.commit()
cursor.close()
def fetch_all(self, sql, params=None):
cursor = self.conn.cursor()
if params is None:
cursor.execute(sql)
else:
cursor.execute(sql, params)
result = cursor.fetchall()
cursor.close()
return result
def fetch_one(self, sql, params=None):
cursor = self.conn.cursor()
if params is None:
cursor.execute(sql)
else:
cursor.execute(sql, params)
result = cursor.fetchone()
cursor.close()
return result
def insert(self, table_name, data):
keys = ', '.join(data.keys())
values = ', '.join(['?' for _ in range(len(data))])
sql = f"INSERT INTO {table_name} ({keys}) VALUES ({values})"
self.execute(sql, tuple(data.values()))
def update(self, table_name, data, condition):
set_clause = ', '.join([f"{key} = ?" for key in data.keys()])
sql = f"UPDATE {table_name} SET {set_clause} WHERE {condition}"
self.execute(sql, tuple(data.values()))
def delete(self, table_name, condition):
sql = f"DELETE FROM {table_name} WHERE {condition}"
self.execute(sql)
```
现在我们可以用这个类来操作数据库了。比如,我们可以创建一个students表,包含id、name、age三个字段,然后插入一条数据,查询所有数据,更新一条数据,再次查询所有数据,最后删除一条数据,再次查询所有数据:
```python
db = DbHelper('example.db')
db.connect()
# 创建students表
db.execute('CREATE TABLE students (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)')
# 插入一条数据
data = {'name': '张三', 'age': 20}
db.insert('students', data)
# 查询所有数据
result = db.fetch_all('SELECT * FROM students')
print(result) # [(1, '张三', 20)]
# 更新一条数据
data = {'name': '李四', 'age': 22}
db.update('students', data, 'id = 1')
# 再次查询所有数据
result = db.fetch_all('SELECT * FROM students')
print(result) # [(1, '李四', 22)]
# 删除一条数据
db.delete('students', 'id = 1')
# 再次查询所有数据
result = db.fetch_all('SELECT * FROM students')
print(result) # []
db.close()
```
这样就完成了一个简单的DbHelper类的封装。当然,实际上还需要考虑异常处理等问题,这里只是一个演示。
阅读全文