Mysql与Python交互
PyMysql介绍
PyMsql是在Python3.x版本中用于连接Mysql服务器的一个客户端
安装PyMysql:
pip install pymysql
安装完成后导入包:
from pymysql import *
导入包后的操作:
1.创建数据库连接
2.创建cursor对象
3.执行sql语句和数据处理
4.关闭游标
5.关闭连接
下面请看举例:
import pymysql
建立链接
conn = pymysql.connect(
host='localhost', #指定主机
port=3306, #端口
user='root', #用户
passwd='root', #密码
db='db3', #指定库
charset='utf8', #指定字符集
autocommit=True #是否自动提交数据
)
获取游标
cur = conn.cursor()
输入sql语句
sql = 'insert into abc values(1,"kevin","155")'
执行sql语句
info = cur.execute(sql)
确认提交执行
conn.commit()
print(info) #这里输出的是操作了几条数据,比如插入一条就打印1
cur.close() #关闭游标
conn.close() #关闭连接
执行结果:
介绍下面的内容之前先介绍一个内容就是SQL注入问题
什么是SQL注入呢?
用户提交带有恶意的数据与SQL语句进行字符串方式的拼接,从而影响了SQL语句的意义,最终产生数据泄露或数据篡改的现象
怎么防止呢? SQL语句参数化
参数化就是在设计与数据库连接时,在需要填入数值或数据的地方,使用参数来给给值,这个方法是目前被视为最有效方式SQL注入攻击的防御方式
下面请看举例:
import pymysql
# 建立链接
conn = pymysql.connect(
host='localhost', #指定主机
port=3306, #端口
user='root', #用户
passwd='root', #密码
db='db3', #指定库
charset='utf8', #指定字符集
autocommit=True #是否自动提交数据
)
# 获取游标
cur = conn.cursor()
#比如现在有个登录功能
name=input('用户名:').strip()
pwd=input('密码:').strip()
sql='select * from userinfo where user=%s and passwd=%s'
# 执行sql语句
#把sql语句参数化
userinfo=(name,pwd)
info = cur.execute(sql,userinfo) #自动过滤一些恶意字符
if info != 0:
print('登录成功')
else:
print('失败')
cur.close() #关闭游标
conn.close() #关闭连接
在PyMsql中,查数据不需要提交,直接返回查数据的结果,比如查到10条就返回10条,但是对于增,删,改数据这些操作需要使用conmmit提交
下面举例:
比如有一个注册登录功能,需要往数据库写入,下面实现一个简易版的
import pymysql
# 建立链接
conn = pymysql.connect(
host='localhost', # 指定主机
port=3306, # 端口
user='root', # 用户
passwd='root', # 密码
db='db3', # 指定库
charset='utf8', # 指定字符集
autocommit=True # 是否自动提交数据
)
# 获取游标
cur = conn.cursor()
# 注册
name = input('请输入用户名:').strip()
pwd = input('请输入密码:').strip()
sql_write = 'insert into userinfo(user,passwd) values(%s,%s)'
register_info = (name, pwd) #参数化
try:
info = cur.execute(sql_write, register_info)
conn.commit()
except:
print('err')
username=input('账号:').strip()
password=input('密码:').strip()
#登录
login="select * from userinfo where user=%s and passwd=%s "
login_info=(username,password)
num=cur.execute(login,login_info)
if num !=0:****
print('scuss')
else:
print('err')
cur.close() # 关闭游标
conn.close() # 关闭连接
批量增加数据
前面我们演示了增加单条数据,下面就是演示增加多条数据
其实就是把多个元组添加到列表中
print(cus.fetchone()) #输出一条数据
print(cus.fetchmany()) #指定返回多少条数据,默认返回一条
print(cus.fetchall()) #返回所有数据
rollback() #回滚当前事务
import pymysql
conn = pymysql.connect(
host='localhost',
port=3306,
user='root',
passwd='root',
db='db3',
charset='utf8mb4'
)
cus = conn.cursor()
try:
sql = "insert into userinfo values(%s,%s,%s)"
info = [(1, '110', '155233'), (2, '111', '258943'), (3, '112', '369258147'), (4, '119', '147258')]
cus.executemany(sql, info) #针对一个操作批量执行
conn.commit()
except:
print('err')
cus.close()
conn.close()
相信这个会了之后批量删除,修改也是类似,记住处理数据的同时注意sql注入问题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)