day06 python代码操作MySQL
day06 python代码操作MySQL
今日内容
- python代码操作MySQL
- 基于python与MySQL实现用户注册登录
python操作MySQL
python 胶水语言、调包侠(贬义词>>>褒义词)
"""
python这门语言本身并不牛逼 牛逼的是支持该语言的各种功能强大的模块、软件
"""
# 后期在使用python编程的时候 很多看似比较复杂功能可能都已经有相应的模块
模块名字 pymysql
下载模块
1.命令行
pip3 install 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='db1',
charset='utf8',
autocommit=True # 涉及到增删改 自动二次确认
)
# 生成一个游标对象
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典
# 定义SQL语句
sql = 'select * from userinfo'
# 执行SQL语句
res = cursor.fetchall()
# 避免光标到最末端,导致读取不到数据
cursor.scroll(0,'absolute') # 相对数据开头位置移动,从第一个数据重新开始
# cursor.scroll(1,'relative') # 相对当前位置移动,从当前位置跳过一个数据
print(res)
# 注:
1、execute返回值:是执行SQL语句之后收到影响的行数
2、获取返回结果
fetchall():获取所有的结果 # 结果:列表套字典
fetchone():获取结果集的第一个结果 # 结果:数据字典
fetchmany():括号内可以指定获取几个结果 # 结果:列表套字典
3、fetchall():存在光标的概念,读取一遍之后光标在最末端,第二遍读取是没有数据的
4、scroll():可以解决光标读取的问题
cursor.scroll(1,'relative') # 相对当前位置移动,从当前位置跳过一个数据
cursor.scroll(0,'absolute') # 相对数据开头位置移动,从第一个数据重新开始
SQL注入问题
SQL注入问题的产生:
就是通过一些特殊符号的组合 达到某些特定的效果从而避免常规的逻辑
代码:
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) # 让数据自动组织成字典
# 获取用户名和密码
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('用户名或密码错误')
"""
登录功能
1.获取用户名和密码
2.基于用户名和密码直接精准查找
"""
"""
问题1
用户名正确 不需要密码也能登录
问题2
用户名和密码都不需要也能登录
SQL注入问题的产生
就是通过一些特殊符号的组合 达到某些特定的效果从而避免常规的逻辑
SQL注入问题如何解决
execute方法自动帮你解决
比如:
# 针对核心数据 不要自己拼接 交由execute方法帮你筛选再拼接
sql = "select * from userinfo where name=%s and password=%s" # 放到这里帮你拼接
print(sql)
# 执行SQL语句
cursor.execute(sql,(username,password)) # 放到这里帮你拼接 ,一次性插入一个数据
cursor.executemany # 一次性插入多个
"""
功能补充
# 加上这个选项:autocommit=True ,增删改会自动确认后修改数据,不然会二次确认才会修改数据
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) # 让数据自动组织成字典
sql1 = 'select * from userinfo'
sql2 = 'insert into userinfo(name,password) values(%s,%s)'
sql3 = 'update userinfo set name="jasonNB" where id=1'
sql4 = 'delete from userinfo where id=2'
cursor.executemany(sql2,[('jason111',123),('jason222',321),('jason333',222)]) # 一次插入多条数据
# 主动关闭链接 释放资源
conn.close()
测试:
# 1.查询语句可以正常执行并获取结果
# cursor.execute(sql1)
# 2.插入语句能够执行 但是并没有影响表数据
# cursor.execute(sql2,('jackson',666))
# 3.更新语句能够执行 但是并没有影响表数据
# res = cursor.execute(sql3)
# print(res)
# 4.删除语句能够执行 但是并没有影响表数据
# res = cursor.execute(sql4)
# print(res)
'''针对增删改操作 需要二次确认才可生效'''
# cursor.execute(sql2,('jackson',666))
# conn.commit()
# cursor.execute(sql3)
# conn.commit()
# cursor.execute(sql4)
# conn.commit()
结论:加上这个选项:autocommit=True ,增删改会自动确认后修改数据,不然会二次确认才会修改数据
注册登录功能
def register(cursor):
# 获取用户名和密码
username = input('请输入注册用户名:').strip()
password = input('请输入密码:').strip()
# 验证用户名是否已存在
sql = 'select * from userinfo where name=%s'
# 执行SQL语句
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('请输入用户名:').strip()
password = input('请输入密码:').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('用户:%s登录成功'%username)
else:
print('密码错误')
else:
print('用户不存在')
def get_conn():
import pymysql
# 创建链接
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123',
database='db1',
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('指令错误')
day06 python代码操作MySQL的更多相关文章
- 通过Python代码操作MySQL:
pymsql / MySQLdb pymysql支持 py2/py3 MySQLdb支持py2 ORM框架 django orm ( 自己对数据连接有优化机制 ) SQLAlchemy ( 自带数据库 ...
- Python中操作mysql的pymysql模块详解
Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...
- (转)Python中操作mysql的pymysql模块详解
原文:https://www.cnblogs.com/wt11/p/6141225.html https://shockerli.net/post/python3-pymysql/----Python ...
- python数据库操作 - MySQL入门【转】
python数据库操作 - MySQL入门 python学院 2017-02-05 16:22 PyMySQL是Python中操作MySQL的模块,和之前使用的MySQLdb模块基本功能一致,PyMy ...
- python下操作mysql 之 pymsql
python下操作mysql 之 pymsql pymsql是Python中操作MySQL的模块, 下载安装: pip3 install pymysql 使用操作 1, 执行SQL #!/usr/ ...
- 通过python代码连接MySQL以及插入和显示数据
通过python代码连接MySQL以及插入和显示数据: 数据库huahui创建一个shibie的表,里面有两个varcahr(100)的字段,num和result. import pymysql im ...
- 字符编码和Python代码操作文件
字符编码和Python代码操作文件 读写模式之a模式 # a模式 只追加模式 # 路径不存在:自动创建 with open(r'a.txt','a',encoding='utf8') as f: pa ...
- python 之操作mysql 数据库实例
对于python操作mysql 数据库,具体的步骤应为: 1. 连接上mysql host 端口号 数据库 账号 密码2. 建立游标3. 执行sql(注意,如果是update,insert,delet ...
- python之操作mysql(一)
使用python操作mysql的思路: 1. 连接数据库:ip,端口号,密码,账号,数据库 2. 建立游标 3.执行sql语句 4.获取执行结果 5.关闭游标,关闭连接 conn = pymysql. ...
随机推荐
- stop: Job failed while stopping start: Job is already running: networking eth0 not configured
再给ubuntu系统重启网络服务的时候出现失败,"stop: Job failed while stopping start: Job is already running: network ...
- hdu 2159 FATE(DP)
题意: 小余玩游戏,离最后一级还需n的经验值,但是他已经很厌烦了,还剩下m的忍耐度.每杀一只怪小余会得到相应的经验,同时减掉相应的忍耐度. 当忍耐度降到0或者0以下时,小余就不会再玩这个游戏.小余还说 ...
- 『学了就忘』Linux基础命令 — 20、文件操作的相关命令
目录 1.touch 命令 2.stat命令 3.cat命令 4.more命令 5.less命令 6.head命令 7.tail命令 1.touch 命令 touch命令用于创建空文件或修改文件时间, ...
- 计算机网络-3-2-点对点协议PPP
点对点协议PPP 在通信链路较差的年代,在数据链路层使用可靠传输协议曾经是一种好方法,比较简单的点对点PPP协议则是目前使用最广泛的数据链路层协议. PPP协议的特点 互联网用户通过都要连接到某个IS ...
- 交换机 & 路由基础
以太网帧结构 Ethernet II帧结构 Ethernet_II帧类型值大于等于1536(0×0600) 以太网帧结构的长度在64-1518字节之间 帧各字段说明 目的MAC地址(DMAC):接收方 ...
- 攻防世界 Misc 新手练习区 坚持60s Writeup
攻防世界 Misc 新手练习区 坚持60s Writeup 题目介绍 题目考点 java反编译 jd-gui 的使用 Writeup 下载附件并打开 kali执行命令 java -jar 9dc125 ...
- 【Python+postman接口自动化测试】(5)抓包工具Fiddler简介
Fiddler简介 Fiddler 4.6 下载 http://www.downza.cn/soft/234727.html 为什么使用Fiddler? 可以抓到请求数据,查看Raw格式/表单格式/J ...
- @RequestAttribute与@MatrixVariable
@RequestAttribute 它只能使用在方法入参上,从request请求参数中获取对应的属性值. //路径跳转 @GetMapping("/goto") public St ...
- PTA 7-2 哈夫曼编码 (30分)
PTA 7-2 哈夫曼编码 (30分) 给定一段文字,如果我们统计出字母出现的频率,是可以根据哈夫曼算法给出一套编码,使得用此编码压缩原文可以得到最短的编码总长.然而哈夫曼编码并不是唯一的.例如对字符 ...
- 重磅|Apache ShardingSphere 5.0.0 即将正式发布
Apache ShardingSphere 5.0.0 GA 版在经历 5.0.0-alpha 及 5.0.0-beta 接近两年时间的研发和打磨,终于将在 11 月份与大家正式见面! 11 月 10 ...