赞
踩
1.首先需要导入pymysql模块
2.完整的代码
import pymysql # 1.连接mysql服务端 conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='888', database='b1', charset='utf8mb4', autocommit=True, # 自动执行增删改查操作 ) # 2.产生一个游标对象 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 3.编写sql语句 sql = 'select * from t1' # 4.发送给服务端 cursor.execute(sql) # 5.获取命令的执行结果 res = cursor.fetchall() print(res) # [{'id': 0, 'name': 'ming'}]
3.获取结果的三种方式:
# 1.获取结果中的第一条数据
cursor.fetchone()
# 2.获取结果中的所有数据
cursor.fetchall()
# 3.获取结果中指定条数的数据 n表示自定义条数,超出范围的话有多少条就展示多少条
cursor.fetchmany(n)
4.指定位置,类似于文件中的光标的概念
# 1.relative 基于当前位置往后移动
cursor.scroll(1, mode='relative')
# 2.基于数据集开头的位置往后移动
cursor.scroll(0, mode='absolute')
import pymysql conn = pymysql.connect( host='127.0.0.1', port=3306, database='a1', user='root', password='888', charset='utf8mb4', autocommit=True, ) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) username = input('username').strip() password = input('password').strip() sql = 'select * from login where name=%s and pwd=%s' res = cursor.execute(sql, (username, password)) if res: print('登录成功') else: print('用户名或密码错误')
# 插入单条数据方法1:
# sql = 'insert into login values(3, "xieming", "111")'
# 插入单条数据方法2:
# sql = 'insert into login(name, pwd) values("xieming", "111")'
# res = cursor.execute(sql)
# 插入多条数据
# sql = "insert into login(name, pwd) values(%s,%s)"
# sql = "insert into login values(%s,%s)"
# res = cursor.executemany(sql, [("xm", '111'), ('mx', '111')])
1.出现的sql注入问题:
当我们在用户登录系统中输入用户信息的时候会出现sql注入问题
select * from userinfo where name='jason' -- haha' and pwd=''
select * from userinfo where name='xyz' or 1=1 -- heihei' and pwd=''
2.本质:利用一些特殊符号的组合产生特殊的含义,使得正常的sql语句失效,从而逃脱正常的业务逻辑
3.措施:针对数据自己不要处理,交给pymysql中的方法(execute)自动去过滤处理
sql = "select * from userinfo where name=%s and pwd=%s"
cursor.execute(sql, (username, password)) # 自动识别%s 并自动过滤各种符合 最后合并数据
1.as语法:给字字段和表起别名
2.comment语法:给表和字段添加注释信息
create table s1(
id int comment '学生编号',
name varchar(32)
) comment '这是一张学生信息表';
3.concat、concat_ws语法
SELECT
concat( sid,'|', gender )
FROM
student;
SELECT
CONCAT_WS( '$', sid, gender, class_id, sname )
FROM
student;
4.exists语法
select * from userinfo where exists (select * from department where id<100)
import pymysql from pymysql import IntegrityError conn = pymysql.connect( host='127.0.0.1', port=3306, database='a1', user='root', password='888', charset='utf8mb4', autocommit=True, ) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) def register(): try: print('注册') username = input('username').strip() password = input('password').strip() sql = 'insert into login(name, pwd) values(%s,%s)' res = cursor.execute(sql, (username, password)) print(res) if res: print('注册成功') except IntegrityError: print('用户名已存在') def login(): print('登录') username = input('username').strip() password = input('password').strip() sql = 'select * from login where name=%s and pwd=%s' res = cursor.execute(sql, (username, password)) if res: print('登录成功') else: print('用户名或密码错误') func_dic = { '1': register, '2': login, } def run(): while True: print( """ 1 注册 2 登录 """ ) choice = input('请输入功能编号(q退出)').strip() if choice == 'q': return if choice in func_dic: func_dic.get(choice)() else: print('请输入正确的功能编号') run()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。