1.pymysql基本使用
- 打开数据库连接,
- 使用cursor()方法获取操作游标
- 执行SQL语句
获取命令执行的查询结果
1.1 打开数据库连接
# 打开数据库连接
db = pymysql.connect(host='127.0.0.1',
user='root',
port=3306,
password="123",
database='db5')
1.2 使用cursor()方法获取操作游标
cursor()方法获取操作游标,同时可以指定参数"cursor=pymysql.cursors.DictCursor"将查询结果以字典的形式返回.不添加的时候,查询的结果以元祖返回
# 使用cursor()方法获取操作游标
cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
1.3 执行SQL语句
执行sql语句之后,返回的是当前sql语句影响的行数
# 定义SQL语句
sql = "select * from emp;"
# 执行SQL语句
res = cursor.execute(sql) # 返回的是当前sql语句影响的行数
# print(res) => 10
1.4 获取命令执行的查询结果
这三条方法读取数据类似于文件光标的移动,移动到位置之后只能够读取之后的数据.同时可以使用cursor.scroll(1). cursor.scroll(1,"absolute")改变游标所在的位置
- cursor.fetchone(),获取一条数据
- cursor.fetchall(),获取所有数据
- cursor.fetchmany(5),可以指定拿几条
- cursor.scroll(1),相对于光标所在的位置继续往后移动1
- cursor.scroll(1,"absolute"),相对于数据的开头所在的位置继续往后移动1
print(cursor.fetchone()) # 只拿一条
cursor.scroll(1) # 相对于光标所在的位置继续往后移动1
print(cursor.fetchall()) # 拿所有
cursor.scroll(1,"absolute") # 相对于数据的开头所在的位置继续往后移动1
print(cursor.fetchmany(5)) # 可以指定拿几条
2.sql注入及解决方法
SQL注入是一种恶意的攻击技术.攻击者通过在用户输入或是其他数据插入点,插入恶意的SQL语句,利用应用程序对用户输入数据验证不足的漏洞,来欺骗数据库执行非预期的命令.
创建users表
create table users(
id int primary key,
name varchar(16) not null,
age int not null
);
alter table users add passwd char(16) not null;
insert into users values(1,"zs",10,"123"),(2,"lisi",12,"456"),(3,"wu",13,"3333");
sql的语句和输入的参数相关
import pymysql
# 打开数据库连接
db = pymysql.connect(host='127.0.0.1',
user='root',
port=3306,
password="123",
database='db5')
# 使用cursor()方法获取操作游标
cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
"""
cursor=pymysql.cursors.DictCursor 将查询结果以字典的形式返回
"""
username = input("输入用户名>>")
passwd = input("输入密码>>")
# 定义SQL语句
sql = "select * from users where name='%s' and passwd='%s'"%(username,passwd)
print(sql)
# 执行SQL语句
res = cursor.execute(sql) # 返回的是当前sql语句影响的行数
if res:
print("登陆成功!!")
print(cursor.fetchall())
else:
print("用户名或是密码错误")
恶意输入:
解决方式:
日常生活中很多软件在注册的时候不能含有特殊符号.
敏感的数据不要自己做拼接,书写sql语句时先用%s占位符,之后将需要拼接的数据直接交给execute方法即可
import pymysql
# 打开数据库连接
db = pymysql.connect(host='127.0.0.1',
user='root',
port=3306,
password="123",
database='db5')
# 使用cursor()方法获取操作游标
cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
"""
cursor=pymysql.cursors.DictCursor 将查询结果以字典的形式返回
"""
username = input("输入用户名>>")
passwd = input("输入密码>>")
# 定义SQL语句
sql = "select * from users where name=%s and passwd=%s"
print(sql)
# 执行SQL语句
res = cursor.execute(sql,(username,passwd)) # 自动识别sql语句里面的%s
if res:
print("登陆成功!!")
print(cursor.fetchall())
else:
print("用户名或是密码错误")
3.pymysql基本操作
在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务.
当前的事务设置的是手动提交,我们要结束事务只能是结束事务或是回滚事务.所以在操作数据的增删改时,都需要提交或是回滚事务,实现的操作才能够对于数据库有效.
# _*_ coding utf-8 _*_
# george
# time: 2024/11/18上午11:03
# name: pymysql基础操作.py
# comment:
import pymysql
# 打开数据库连接
db = pymysql.connect(host='127.0.0.1',
user='root',
port=3306,
password="123",
database='db5')
# 使用cursor()方法获取操作游标
cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
# 增
# sql = "insert into users values(%s,%s,%s,%s)"
#
# res = cursor.execute(sql, (4, "zl", 15, "2222"))
# db.commit() # 确认
# 改
# sql2 = "update users set age=%s where name=%s"
# res2 = cursor.execute(sql2, (20, "zs"))
# print(res2)
# db.commit()
# 删
try:
sql3 = "delete from users where id=%s"
res2 = cursor.execute(sql3, (4,))
db.commit()
print(res2)
except:
db.rollback()
# 查
# sql4 = "select * from users"
# res2 = cursor.execute(sql4)
# print(cursor.fetchall())