PyMySQL模块
介绍
pymysql属于第三方模块
下载
1、命令行下载
pip3 insatll pymysql
pip3 install pymysql -i 源地址
2、借助pycharm
3、python解释器配置文件
模块的基本使用
import pymysql # 创建链接 conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', database='db_5', charset='utf8' ) # 生成一个游标对象 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典 # 定义SQL语句 sql = 'select * from userinfo' # 执行SQL语句 cursor.execute(sql) # 获取返回结果 res = cursor.fetchall() print(res)
1、execute
execute返回值是执行SQL语句之后受影响的行数
2、fetchall()获取所有的结果 数据,展示形式是列表套字典
fetchone()获取结果集第一个结果,展示的形式是字典
fetchmany()括号内可以指定获取几个结果集,展示的形式是列表套字典
3、光标移动(scroll)
relative 相对当前位置移动
absolute 相对数据开头位置移动
sql注入问题
1、sql注入问题的产生
就是通过一些特殊符号的组合,达到某些特定的效果从而避免常规的逻辑
2、sql注入问题的解决
execute方法自动帮你解决
import pymysql # 创建链接 conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', database='db_5', charset='utf8' ) # 生成一个游标对象 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典 # 获取用户名和密码 username = input('username>>>:').strip() password = input('password>>>:').strip() # 构造SQL语句 # sql = "select * from userinfo where name='%s' and password='%s'"%(username,password) # 针对核心数据 不要自己拼接 交由execute方法帮你筛选再拼接 sql = "select * from userinfo where name=%s and password=%s" print(sql) # 执行SQL语句 cursor.execute(sql,(username,password)) res = cursor.fetchall() if res: print(res) print('登录成功') else: print('用户名或密码错误')
功能补充
用python代码执行数据库增删改查操作时,只能执行查的功能,执行其他功能需要二次确认才可生效(conn.commit())
# cursor.execute(sql2,('jackson',666)) # conn.commit() # cursor.execute(sql3) # conn.commit() # cursor.execute(sql4) # conn.commit()
解决这种问题只需要在创建链接的时候添加额外的配置参数即可
一次性添加多数据(executemany)
cursor.executemany(sql2,[('jason111',123),('jason222',321),('jason333',222)])
主动关闭链接,释放资源
conn.close()
注册登录
def register(cursor): # 获取用户名和密码 username = input('username>>>:').strip() password = input('password>>>:').strip() # 验证用户名是否已存在 sql = 'select * from userinfo where name=%s' cursor.execute(sql, (username,)) res = cursor.fetchall() if not res: sql1 = 'insert into userinfo(name,password) values(%s,%s)' cursor.execute(sql1, (username, password)) print('用户:%s注册成功' % username) else: print('用户名已存在') def login(cursor): # 获取用户名和密码 username = input('username>>>:').strip() password = input('password>>>:').strip() # 先获取是否存在用户名相关的数据 sql = 'select * from userinfo where name=%s' cursor.execute(sql, (username,)) res = cursor.fetchall() if res: # 校验密码 real_dict = res[0] if password == str(real_dict.get('password')): print('登录成功') else: print('密码错误') else: print('用户名不存在') def get_conn(): import pymysql # 创建链接 conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', database='db_5', charset='utf8', autocommit=True # 涉及到增删改 自动二次确认 ) # 生成一个游标对象 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典 return cursor func_dic = {'1': register, '2': login} while True: print(""" 1.注册功能 2.登录功能 """) cursor = get_conn() choice = input('请输入功能编号>>>:').strip() if choice in func_dic: func_name = func_dic.get(choice) func_name(cursor) else: print('暂时没有当前功能编号')