第43篇 pymysql模块的安装 使用pymysql模块进行数据库的增删改查
Posted cavalier-chen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第43篇 pymysql模块的安装 使用pymysql模块进行数据库的增删改查相关的知识,希望对你有一定的参考价值。
内容回顾:
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模块进行数据库的增删改查的主要内容,如果未能解决你的问题,请参考以下文章