Python是一种流行的编程语言,可以轻松地访问各种数据库。在大多数情况下,开发人员需要通过编写许多SQL语句来访问数据库,从而导致重复的代码和出现错误的机会。这时,可以使用面向对象编程的思想,封装一个数据库操作类,通过类的封装来提高程序的可读性和可维护性。
下面我们来封装一个基础的MySQL数据库操作类,包含对数据库的增删改查方法。
1. 首先,我们需要安装Python的mysql-connector库,可以通过pip命令来安装。
```
pip install mysql-connector-python
```
2. 为了方便直接操作数据库,我们需要在初始化方法中连接数据库,并设置好数据库信息和编码格式。
```python
import mysql.connector
class MysqlUtil():
def __init__(self, host, port, user, password, database):
self.host = host
self.port = port
self.user = user
self.password = password
self.database = database
self.conn = mysql.connector.connect(
host=self.host,
port=self.port,
user=self.user,
password=self.password,
database=self.database,
charset='utf8'
)
self.cursor = self.conn.cursor()
```
3. 增加记录操作方法insert_one,采用参数化操作,插入单条记录。
```python
def insert_one(self, table_name, data):
'''
:param table_name: 表名
:param data: 数据,类型为dict
:return:
'''
columns = []
values = []
for key in data:
columns.append(key)
values.append(data[key])
column_str = ','.join(columns)
placeholder_str = ','.join(['%s'] * len(values))
sql = f"insert into {table_name} ({column_str}) values ({placeholder_str})"
self.cursor.execute(sql, tuple(values))
self.conn.commit()
```
4. 更新记录操作方法update_one,同样采用参数化操作。
```python
def update_one(self, table_name, data, condition):
'''
:param table_name: 表名
:param data: 要更新的数据,类型为dict
:param condition: 更新条件,类型为dict
:return:
'''
set_list = []
for key in data:
set_list.append("`" + key + "`=%s")
set_str = ','.join(set_list)
where_list = []
for key in condition:
where_list.append("`" + key + "`=%s")
where_str = ' and '.join(where_list)
values = list(data.values()) + list(condition.values())
sql = f"update {table_name} set {set_str} where {where_str}"
self.cursor.execute(sql, tuple(values))
self.conn.commit()
```
5. 删除记录操作方法delete_one,同样采用参数化操作。
```python
def delete_one(self, table_name, condition):
'''
:param table_name: 表名
:param condition: 删除条件,类型为dict
:return:
'''
where_list = []
for key in condition:
where_list.append("`" + key + "`=%s")
where_str = ' and '.join(where_list)
values = [v for v in condition.values()]
sql = f"delete from {table_name} where {where_str}"
self.cursor.execute(sql, tuple(values))
self.conn.commit()
```
6. 查询记录操作方法select_one,只查询一条记录。
```python
def select_one(self, table_name, condition):
'''
:param table_name: 表名
:param condition: 查询条件,类型为dict
:return: 返回查询结果
'''
where_list = []
for key in condition:
where_list.append("`" + key + "`=%s")
where_str = ' and '.join(where_list)
values = [v for v in condition.values()]
sql = f"select * from {table_name} where {where_str} limit 1"
self.cursor.execute(sql, tuple(values))
result = self.cursor.fetchone()
return result
```
7. 查询记录操作方法select_all,查询所有符合条件的记录。
```python
def select_all(self, table_name, condition=None):
'''
:param table_name: 表名
:param condition: 查询条件,类型为dict
:return: 返回查询结果
'''
if condition is None:
sql = f"select * from {table_name}"
self.cursor.execute(sql)
else:
where_list = []
for key in condition:
where_list.append("`" + key + "`=%s")
where_str = ' and '.join(where_list)
values = [v for v in condition.values()]
sql = f"select * from {table_name} where {where_str}"
self.cursor.execute(sql, tuple(values))
result = self.cursor.fetchall()
return result
```
以上就是一个基础的MySQL数据库操作类,包含增删改查方法。在实际项目中,我们可以进一步封装这个基础类,增加事务处理、分页等常用功能。
当我们使用类封装数据库时,需要注意以下几点:
- 尽量使用参数化操作,以避免SQL注入攻击。
- 通过封装可以提高程序的可读性和可维护性。
- 数据库连接是比较耗时的操作,需要注意连接池的使用。
- 在使用完数据库连接后,一定要关闭连接。
- 小心使用事务,在事务失败时需要及时回滚。
壹涵网络我们是一家专注于网站建设、企业营销、网站关键词排名、AI内容生成、新媒体营销和短视频营销等业务的公司。我们拥有一支优秀的团队,专门致力于为客户提供优质的服务。
我们致力于为客户提供一站式的互联网营销服务,帮助客户在激烈的市场竞争中获得更大的优势和发展机会!
发表评论 取消回复