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()  #关闭连接

执行结果:
image

介绍下面的内容之前先介绍一个内容就是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注入问题
posted @   家购诗  阅读(6)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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)
点击右上角即可分享
微信分享提示