python中操作MySQL
pymysql模块 第三方模块
import pymysql
# 1.连接MySQL服务器
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='321',
db='db3',
charset='utf8mb4'
)
# 2.产生游标对象
# cursor = conn.cursor() # 括号内不填写额外参数,数据是元组,指定性不强 [()]
cursor = conn.cursor(cursor=pymysql.cursor.DictCursor) # [{}]
# 3.编写sql语句
sql = 'select * from score;'
# 4.发送SQL语句
affect_rows = cursor.execute(sql)
# 5.获取SQL语句执行之后的结果
res = cursor.fetchall()
print(res)
pymysql补充说明
1.获取数据
fetchall() 获取所有结果
fetchone() 获取结果集的第一个数据
fetchmany() 获取指定数量的结果
cursor.scroll(1,'relative') # 基于当前位置向后移动一个
cursor.scroll(1,'absolute') # 基于数据的开头往后移动一位
2.增删改查
autocommit=True # 针对增删改自动确认(在连接数据库时直接配置)
conn.commit() # 针对增删改二次确认(没有配置通过代码确认)
python中SQL的注入问题
我们在python中编写sql语句时会遇到各种问题,比如我们在编写用户登录功能时,只需要输对姓名或者用户名密码都输入错误了,但是却能够东路成功,这是因为遇到了SQL注入问题导致的
SQL注入问题就是利用特殊的组合产生特殊的含义,从而避开正常的业务逻辑
eg:
sql = 'select * from user where name="jason" --fsdag" and spwd=""'
转成SQL语句就是
select * from user where name='jason' --fsdag' and spwd='' # 用户名后面的语句被注释了
sql = "select * from user where name='' or 1=1 --fgdsfh' and pwd=''"
转成SQL语句
select * from user where name='' or 1=1 --fgdsfh' and pwd=''
# where后面是or连接的只要有一个成立就成立
针对上面的这种注入问题使用execute即可解决
sql = 'select * from user where name=%s and pwd=%s'
cursor.execute(sql,(username,password))
execute还有一个兄弟executemany,它可以一次性传入多条数据 executemany[sql,(),()]
视图
视图就是我们通过查询得到一张表,然后保存下来留待下次使用但是这张表是虚拟的,只能查询不能做修改删除操作
create view teacher_course as
select * from teacher inner join course on teacher.tid = course.teacher_id