python 操作MySQL数据库实现简单的增删改查功能
python操作mysql数据库需要导入pymysql(linux)/PyMySQL(windows),在这使用Linux
pymysql模块使用流程
1. 建立数据库连接对象(db=pymysql.connect(主机名, 用户名, 密码))
2. 创建游标对象cur(操作数据库的对象)
3. 游标对象:cur.execute(sql命令)
4. 提交到数据执行:db.commit()
5. 关闭游标对象:cur.close()
6. 关闭数据库连接对象:db.close()
connect连接对象
db = pymysql.connect(参数列表)
参数列表:
- host:主机地址
- user:用户名
- password:密码
- database:库
- charset:编码方式,推荐utf8
- port:端口号 3306
db(数据库连接对象)的方法
- db.close():断开连接
- db.commit():提交到数据库执行
- db.cursor():创建游标对象,用来执行sql命令
- db.rollback():回滚
cursor游标对象的方法
- execute(sql命令):执行sql命令
- close():关闭游标对象
- fetchone():获取查询结果的第 1 条数据
- fetchall():获取所有的数据
- fetchmany(n):获取自定义条数的数据
注意:fetchall和fetchmany得到的结果一定是大元组里套着小元组:((),(),())
进入正题:
我们写一个python可以操作mysql的模块
根据上述分析来写:
# MysqlPython.py
# 首先导入pymysql,我们目前只用连接的方法
from pymysql import connect
# 创建类
class MysqlHelp(object):
# 初始化方法
def __init__(self, database, host='localhost', user='root', password='123456', charset='utf8', port=3306):
self.database = database
self.host = host
self.user = user
self.password = password
self.charset = charset
self.port = port
# 初始化完后连接到数据库并创建好游标
def open(self):
# 连接数据库
self.conn = connect(host = self.host, user = self.user, password = self.password, database = self.database, charset = self.charset, port = self.port)
# 创建游标
self.cur = self.conn.cursor()
# 有连接数据库,就得有关闭数据库
def close(self):
self.cur.close()
self.conn.close()
# 光连接关闭数据库不行啊,中间还要对数据库操作呢
def sql_execute(self, sql, L=[]): # 增删改
# 操作就得打开数据库吧
self.open()
# 对sql语句处理(即开始操作数据库了),有成功有失败
try:
self.cur.execute(sql, L) # 执行sql命令
self.conn.commit() # 提交到数据库执行
print('ok')
except Exception as e:
self.conn.rollback()
print('failed', e)
# 打开数据库就得关闭吧
self.close()
# 增删改有了,查呢
def getAll(self, sql, L=[]):
self.open()
self.cur.execute(sql, L):
result = self.cur.fetchAll() # 查询结果用result绑定
self.close()
return result # 将查询到的结果返回回去
到这,一个简单的mysql工具就写完了,我们测试一下吧
现有数据库db4
我们利用上边写的MysqlHelp工具来操作这个表
执行查询操作:
# sql_execute.py
# 导入MysqlHelp工具
from MysqlPython import MysqlHelp
# 创建一个实例对象,把数据库传进去
mysql = MysqlHelp('db4')
# 要执行的sql语句
sql_select = 'select * from sheng;'
# 去调用MysqlPython工具里的查询方法
result = mysql.getAll(sql_execute) # 返回一个元组
# 打印结果
for i in result:
print(i)
结果是:
(1, 130000, '浙江省')
(2, 140000, '陕西省')
(3, 150000, '四川省')
(4, 160000, '广东省')
(5, 170000, '山东省')
(6, 180000, '湖北省')
(7, 190000, '河南省')
(9, 200001, '云南省')
(10, 200002, '山西省')
(30, 200003, '吉林省')
(31, None, '湖北')
(32, None, '湖北')
(34, 400001, '新疆省')
执行删除操作:
# sql_execute.py
from MysqlPython import MysqlHelp
mysql = MysqlHelp('db4')
sql_delete = 'delete from sheng where s_name=%s'
mysql.workOn(sql_delete, ['湖北'])
查询一下结果:
mysql> select * from sheng;
+----+--------+-----------+
| id | s_id | s_name |
+----+--------+-----------+
| 1 | 130000 | 浙江省 |
| 2 | 140000 | 陕西省 |
| 3 | 150000 | 四川省 |
| 4 | 160000 | 广东省 |
| 5 | 170000 | 山东省 |
| 6 | 180000 | 湖北省 |
| 7 | 190000 | 河南省 |
| 9 | 200001 | 云南省 |
| 10 | 200002 | 山西省 |
| 30 | 200003 | 吉林省 |
| 34 | 400001 | 新疆省 |
+----+--------+-----------+
11 rows in set (0.00 sec)
执行插入操作:
# sql_execute.py
from MysqlPython import MysqlHelp
mysql = MysqlHelp('db4')
sql_insert = 'insert into sheng(s_id, s_name) values(%s, %s);'
mysql.workOn(sql_insert, ['500001', '北京市'])
查询一下结果:
mysql> select * from sheng;
+----+--------+-----------+
| id | s_id | s_name |
+----+--------+-----------+
| 1 | 130000 | 浙江省 |
...
| 34 | 400001 | 新疆省 |
| 35 | 500001 | 北京市 |
+----+--------+-----------+
12 rows in set (0.00 sec)
执行更改操作:
# sql_execute.py
from MysqlPython import MysqlHelp
mysql = MysqlHelp('db4')
sql_update = 'update sheng set s_id=%s where s_name=%s;'
mysql.workOn(sql_update, ['600021', '北京市'])
查看一下结果:
mysql> select * from sheng;
+----+--------+-----------+
| id | s_id | s_name |
+----+--------+-----------+
| 1 | 130000 | 浙江省 |
...
| 34 | 400001 | 新疆省 |
| 35 | 600021 | 北京市 |
+----+--------+-----------+
本节就到这啦