pymysql的使用
python操作MySQL
pymysql模块
pip3 install pymysql
-------------------------------
最基本代码:
import pymysql
# host='127.0.0.1' 服务端的ip地址 3306端口 自报家门账户与密码后
# 再指定要操作的库 指定编码
# 1.连接MySQL服务端
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123',
db='db4_03',
charset='utf8mb4'
)
# 2.产生游标对象 cursorn 光标;[计] 游标,指针
# cursor = conn.cursor() # 括号内不填写额外参数,fetchall()的结果数据是一个一个元组 指定性不强 [(),(),()] 不知道每个元组里面的数据是哪个字段下的数据,不方便!!!
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # [{},{}]
# 3.编写SQL语句
sql = 'select * from score;'
# 4.发送SQL语句,并执行SQL语句
affect_rows = cursor.execute(sql)
# execute也有返回值 接收的是SQL语句影响的行数
print(affect_rows) # 如果不需要返回值结果,可以不接收返回值
# 5.获取SQL语句执行之后的结果
res = cursor.fetchall()
print(res)
.
. 括号内不填写额外参数,fetchall()的结果数据是一个一个元组 指定性不强 [(),(),()] 不知道每个元组里面的数据是哪个字段下的数据,不方便!!!
.
.fetchall()的结果数据以字典的形式展示,键就是字段名,值就是数据
.
.
.
.
.
.
pymysql补充说明
1.获取数据
fetchall()
获取所有的结果 类似于文件光标的概念,执行完一次,再执行fetchall()就获取不到结果了!!!
fetchone() 获取结果集的第一条数据
fetchmany() 获取指定条数的结果集
ps:注意三者都有类似于文件光标移动的特性
------------------------------------------------------
控制光标移动:
cursor.scroll(1,'relative') # 基于当前位置往后移动一位,一条数据就算移动一位
cursor.scroll(0,'absolute') # 基于数据的开头往后移动
------------------------------------------------------
# 2.增删改查
默认情况看用python是不能对数据库进行增删改的操作的,只有查看数据的权利!!!
如果想要对数据库进行增删改的操作,必须要二次确认!!!
# 方法一:
需要在原来基础代码的最下面再写一行代码!!!
conn.commit() # 针对 增 删 改 需要二次确认(代码确认)
-------------------------------------------
# 方法二:
也可以在原来基础代码的第一行,
连接MySQL服务端代码conn = pymysql.connect()的括号里面再加一行配置
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123',
db='db4_03',
charset='utf8mb4'
autocommit=True
)
# autocommit=True 加了它针对增 删 改 自动确认 就不用手动确认了
---------------------------
.
.
.
.
批量插入数据
import pymysql
list_1 = [('a',1),('b',2),(None,3)] # 元素是不是元组都可以
sql_1 = 'insert into 表明(字段1,字段2) values(%s,%s)'
# 注意,这里的%s不需要加引号,使用execute需要加引号。
# 另外,executemany 在执行过程中能够将python的None转为sql的null,
# 这一点挺方便的
db = pymysql.connect(host= ....)
cursor = db.cursor()
cursor.executemany(sql_1,list_1)
db.commit()
cursor.close()
db.close()
print('完成')
.
.
.
.
.
.
sql语句中涉及到字符串拼接的一律用占位符,然后让excute来帮你拼接
# 尤其是修改新增修改操作,就算你把字符串拼好了,也可能执行的时候出问题!!!
import pymysql
def record_task_name(inspection_type, car=None):
conn = pymysql.connect(user='root', password='root123', host='192.168.11.99', database='test', port=3306)
cursor = conn.cursor(pymysql.cursors.DictCursor) # 生成游标对象
# 拼接字符串一律不推荐!!!
sql1 = "SELECT train_name FROM train WHERE train_id = {};".format(2)
print(sql1)
cursor.execute(sql1)
res1 = cursor.fetchone()
print(res1) # {'train_name': 'hahaha'}
train_name = 'ceshi'
if car:
task_name = '123' + '股道' + 'abc' + '段' + car + '车厢' + ' | 列车888' + train_name + inspection_type
else:
task_name = '123' + '股道' + 'abc' + '段' + '列车7777' + train_name + inspection_type
print(task_name)
sql2 = "update task set task_name = %s where task_id = %s;"
cursor.execute(sql2, (task_name, 1))
conn.commit()
print(sql2)
record_task_name('全检', 'car111')
.
.
.
.
.
.
使用pymysql注意事项!!!!
# 项目中使用 pymysql 最好这样用,把生成游标的代码放到with里面去
# 这样执行完,就自动关掉conn连接对象了
# 不然,项目运行过程中,会报一些连接有问题,超时啥的错!!!!
conn = pymysql.connect(user='root', password='222', host='127.0.0.1', database='20230113bbs', port=3306)
try:
with conn.cursor(pymysql.cursors.DictCursor) as cursor:
sql = "SELECT * FROM base_users WHERE username = %s"
cursor.execute(sql, (username,))
user = cursor.fetchone()
if user:
if user['password'] == md5_password:
session['username'] = username
return redirect(url_for('upload_file'))
else:
return '密码错误'
else:
return '用户不存在'
finally:
conn.close()
.
.
.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY