标签:参考 占位符 pychar false 存储空间 python解释器 rip round 表格
内容回顾:
mysql数据库中字段的数据类型:
int 长度是4个字节,能够描述的数据的范围
有符号:
-2^31-1 -- 2^31-1
无符号:
0-2^32-1
varchar(20)
长度最大支持20字节
可变长度
节省空间,但是查询速度慢
char(20)
长度固定是20字节 不足的以空格填充
长度固定
浪费存储空间 查询速度快
字段的属性约束:
not null
unique
primary key
foreign key
auto_increment
正式进入pymysql
创建表格:
create table userinfo(
id int auto_increment primary key,
username varchar(20) not null unique,
password varchar(20) not null
)engine = innodb default charset = utf8;
#注意指定字符集的时候不需要加-
如何使用pycharm与mysql数据库建立连接?
①调出工具条 view --> tool buttons
②点击database -->data source --> mysql
③下载驱动文件 domnload misssing driver files
④输入IP 数据库的名字 用户名 密码登录数据库
#注意在窗口模式下添加记录 最后要点击submit上传数据 才能保存记录
如何安装pymysql模块?
cmd窗口中输入 pip install pymysql
如果飘红是由于当前项目的虚拟环境中的解释器中没有该模块
setting-->项目解释器-->换成python.exe
pip list 参看python解释器中所有的第三方模块
pip -V 查看解释器pip版本
写一个用户登录的小程序1
name = input(‘>>>‘)
pwd = input(‘>>>‘)
if name == ‘alex‘ and pwd == ‘123‘:
print(‘login success!!‘)
else:
print(‘login false!!!‘)
写一个用户登录的小程序2--文件作为数据库
name = input(‘>>>‘)
pwd = input(‘>>>‘)
with open(‘userinfo‘,‘r‘) as f:
for line in f:
username,password = line.strip().split(‘:‘)
if username == name and password == pwd:
print(‘login success!!‘)
break
else:
print(‘login false‘)
写一个用户登录的小程序3--使用mysql数据库
"""
获取用户的输入,登录
"""
import pymysql
# 1.获取用户的输入
name = input(‘>>>‘)
pwd = input(‘>>>‘)
# 1.连接数据库,得到一个连接
conn= pymysql.connect(
host = ‘127.0.0.1‘,
port = 3306,
user = ‘root‘,
password = ‘‘,
database = ‘day43‘,
charset = ‘utf8‘
)
# 2.获取光标
cursor = conn.cursor()
# 3.执行sql语句
# 3.1编写sql语句
sql = "select * from userinfo where username = ‘%s‘ and password = ‘%s‘;"%(name,pwd)
print(sql)
# 3.2使用光标执行sql语句
ret = cursor.execute(sql)
# 4.关闭
cursor.close()
conn.close()
# 5.处理得到的结果
if ret :
print(‘login success!!!‘)
else:
print(‘login false‘)
>>>alex >>>alexdsb select * from userinfo where username = ‘alex‘ and password = ‘alexdsb‘; login success!!!
什么是sql注入以及如何解决?
用户输入的内容中含有恶意的sql语句,后端拿到之后不做检测直接做字符串的拼接,给数据库造成危险,以及恶意登录
>>>alex‘ -- # -- 前后都需要输入空格
>>>123
select * from userinfo where username = ‘alex‘ -- ‘ and password = ‘123‘; 提前结束字符串的拼接 -- 并转译成注释语句
login success!!!
>>>特朗普‘ or 1=1 --
>>>123
select * from userinfo where username = ‘特朗普‘ or 1=1 -- ‘ and password = ‘123‘;
login success!!!
解决办法:
对用户输入的内容进行检测
pymysql已经内置了检测
ret = cursor.execute(sql,[name,pwd]) # 让pymysql帮助拼接sql语句并做检测
"""
获取用户的输入,登录
"""
import pymysql
# 1.获取用户的输入
name = input(‘>>>‘)
pwd = input(‘>>>‘)
# 1.连接数据库,得到一个连接
conn= pymysql.connect(
host = ‘127.0.0.1‘,
port = 3306,
user = ‘root‘,
password = ‘‘,
database = ‘day43‘,
charset = ‘utf8‘
)
# 2.获取光标
cursor = conn.cursor()
# 3.执行sql语句
# 3.1编写sql语句
sql = "select * from userinfo where username = %s and password = %s;" # 注意这里%s不能用引号引起来 %s在pymysql中就是唯一的占位符
print(sql)
# 3.2使用光标执行sql语句
ret = cursor.execute(sql,[name,pwd])
# 4.关闭
cursor.close()
conn.close()
# 5.处理得到的结果
if ret :
print(‘login success!!!‘)
else:
print(‘login false‘)
记录的操作:
增:
"""
获取用户的输入,登录
"""
import pymysql
# 1.连接数据库,得到一个连接
conn= pymysql.connect(
host = ‘127.0.0.1‘,
port = 3306,
user = ‘root‘,
password = ‘‘,
database = ‘day43‘,
charset = ‘utf8‘
)
# 2.获取光标
cursor = conn.cursor()
# 3.执行sql语句
# 3.1编写sql语句
sql = "insert into userinfo(username,password) values (%s,%s);" # 注意这里%s不能用引号引起来 %s在pymysql中就是唯一的占位符
print(sql)
# 3.2使用光标执行sql语句
ret = cursor.execute(sql,[‘EVA_J‘,‘456‘])
# 4.设计到操作和修改数据库的一定要记得提交
conn.commit()
# 5.关闭
cursor.close()
conn.close()
删:
import pymysql
# 1.连接数据库,得到一个连接
conn= pymysql.connect(
host = ‘127.0.0.1‘,
port = 3306,
user = ‘root‘,
password = ‘‘,
database = ‘day43‘,
charset = ‘utf8‘
)
# 2.获取光标
cursor = conn.cursor()
# 3.执行sql语句
# 3.1编写sql语句
sql = "delete from userinfo where username = %s;" # 注意这里%s不能用引号引起来 %s在pymysql中就是唯一的占位符
print(sql)
# 3.2使用光标执行sql语句
ret = cursor.execute(sql,[‘EVA_J‘])
# 4.设计到操作和修改数据库的一定要记得提交
conn.commit()
# 5.关闭
cursor.close()
conn.close()
import pymysql
改
# 1.连接数据库,得到一个连接
conn= pymysql.connect(
host = ‘127.0.0.1‘,
port = 3306,
user = ‘root‘,
password = ‘‘,
database = ‘day43‘,
charset = ‘utf8‘
)
# 2.获取光标
cursor = conn.cursor()
# 3.执行sql语句
# 3.1编写sql语句
sql = "update userinfo set password = %s where username = %s;" # 注意这里%s不能用引号引起来 %s在pymysql中就是唯一的占位符
print(sql)
# 3.2使用光标执行sql语句
ret = cursor.execute(sql,[‘abc123‘,‘jin‘])
# 4.设计到操作和修改数据库的一定要记得提交
conn.commit()
# 5.关闭
cursor.close()
conn.close()
查
# 1.连接数据库,得到一个连接
conn= pymysql.connect(
host = ‘127.0.0.1‘,
port = 3306,
user = ‘root‘,
password = ‘‘,
database = ‘day43‘,
charset = ‘utf8‘
)
# 2.获取光标
cursor = conn.cursor()
# 3.执行sql语句
# 3.1编写sql语句
sql = "select * from userinfo;"
# 3.2使用光标执行sql语句
cursor.execute(sql)
ret = cursor.fetchall()
print(ret)
# 关闭
cursor.close()
conn.close()
字典类型的查
import pymysql
# 1.连接数据库,得到一个连接
conn= pymysql.connect(
host = ‘127.0.0.1‘,
port = 3306,
user = ‘root‘,
password = ‘‘,
database = ‘day43‘,
charset = ‘utf8‘
)
# 2.获取光标
cursor = conn.cursor(cursor = pymysql.cursors.DictCursor) # 指定获取的结果是字典
# 3.执行sql语句
# 3.1编写sql语句
sql = "select * from userinfo;"
# 3.2使用光标执行sql语句
cursor.execute(sql)
ret = cursor.fetchall()
print(ret)
# 关闭
cursor.close()
conn.close()
fetchall fetchone fetchmany(2)
全部取值 取值一次 指定取值个数
光标的回滚
import pymysql
# 1.连接数据库,得到一个连接
conn= pymysql.connect(
host = ‘127.0.0.1‘,
port = 3306,
user = ‘root‘,
password = ‘‘,
database = ‘day43‘,
charset = ‘utf8‘
)
# 2.获取光标
cursor = conn.cursor(cursor = pymysql.cursors.DictCursor)
# 3.执行sql语句
# 3.1编写sql语句
sql = "select * from userinfo;"
# 3.2使用光标执行sql语句
cursor.execute(sql)
ret = cursor.fetchone()
print(ret)
ret = cursor.fetchone()
print(ret)
ret = cursor.fetchone()
print(ret)
# cursor.scroll(0,mode=‘absolute‘) # 光标绝对回滚 回到0位置
cursor.scroll(-1,mode=‘relative‘) # 光标相对回滚 参考位置
ret = cursor.fetchone()
print(ret)
# 关闭
cursor.close()
conn.close()
第43篇 pymysql模块的安装 使用pymysql模块进行数据库的增删改查
标签:参考 占位符 pychar false 存储空间 python解释器 rip round 表格
原文地址:https://www.cnblogs.com/cavalier-chen/p/9755690.html