第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()

  

扫描二维码关注公众号,回复: 3479716 查看本文章

猜你喜欢

转载自www.cnblogs.com/cavalier-chen/p/9755690.html