【Python与AI基础】Python编程基础:操作MySQL
一、概述
针对数据库的操作,一共分三步:
1、建立数据库连接
2、执行SQL语句
3、关闭数据库连接
Python操作数据库(如:MySQL),Python发送能够与数据库直接通信的数据包,并获取数据库服务器的响应结果。
是一种典型的基于TCP/IP的通信过程,要求必须要满足数据库服务器的数据包规则。
在Python中,要操作MySQL,需要依赖于第三方库:pymysql,先安装:pip install pymysql
二、基础查询
import pymysql
# 建立连接
conn = pymysql.connect(host='192.168.112.188', user='qiang', password='123456', database='learn', charset='utf8')
# 操作数据库
# 先定义一个游标对象(默认情况下,游标对象返回的结果是元组
cursor = conn.cursor()
# 执行SQL语句
sql = "select username,password,role from user where userid<6"
cursor.execute(sql)
# 获取结果集
result = cursor.fetchall() # 以二维元组的格式返回
for row in result:
print(row[0], row[1], row[2])
# 关闭连接
conn.close()
完成上述代码,运行的过程使用wireshark抓包,可以看到如下通信过程:
三、使用列表+字典获取数据
from pymysql.cursors import DictCursor
# 将游标对象定义为 字典 类型,进而通过 列表+字典 的格式获取结果集
conn = pymysql.connect(host='localhost', user='root', password='123456', database='learn', charset='utf8')
cursor = conn.cursor(DictCursor)
sql = "select username,password,role from user where userid<6"
cursor.execute(sql)
result = cursor.fetchall()
print(result)
for row in result:
print(row['username'])
conn.close()
上述代码执行后,获取的结果如下:
[{'username': 'woniu', 'password': '123456', 'role': 'editor'}, {'username': 'qiang', 'password': '654321', 'role': 'editor'}, {'username': 'admin', 'password': 'admin123', 'role': 'user'}, {'username': 'test', 'password': 'test111', 'role': 'user'}, {'username': 'woniuxy', 'password': '1234567t', 'role': 'user'}]
四、执行更新操作
# 更新的操作,必须确认提交,两种方式:一种是设置autocommit为True,另外则是在代码中显式提交
conn = pymysql.connect(host='localhost', user='root', password='123456', database='learn', charset='utf8')
conn = pymysql.connect(host='localhost', user='root', password='123456', database='learn', charset='utf8', autocommit=True)
cursor = conn.cursor()
sql = "update user set password='123456789' where userid=13"
cursor.execute(sql)
# conn.commit() # 显式提交更新操作
conn.close()
五、进行函数封装
# 封装查询类操作
def query_mysql(sql):
conn = pymysql.connect(host='localhost', user='root', password='123456', database='learn', charset='utf8')
cursor = conn.cursor(DictCursor)
cursor.execute(sql)
result =cursor.fetchall()
conn.close()
return result
# 封装更新类操作
def update_mysql(sql):
conn = pymysql.connect(host='localhost', user='root', password='123456', database='learn', charset='utf8')
cursor = conn.cursor(DictCursor)
cursor.execute(sql)
conn.commit()
conn.close()