数据库:pymysql模块

一 介绍

之前我们都是通过MySQL自带的命令行客户端工具mysql来操作数据库,那如何在python程序中操作数据库呢?这就用到了pymysql模块,该模块本质就是一个套接字客户端软件,使用前需要事先安装

pip3 install pymysql

  

链接、执行sql、关闭(游标)

import pymysql
user=input(‘用户名: ‘).strip()
pwd=input(‘密码: ‘).strip()

#链接
conn=pymysql.connect(host=‘localhost‘,user=‘root‘,password=‘123‘,database=‘egon‘,charset=‘utf8‘)
#游标
cursor=conn.cursor() #执行完毕返回的结果集默认以元组显示
#cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)

#执行sql语句
sql=‘select * from userinfo where name="%s" and password="%s"‘ %(user,pwd) #注意%s需要加引号
print(sql)
res=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目
print(res)

cursor.close()
conn.close()

if res:
    print(‘登录成功‘)
else:
    print(‘登录失败‘)

  

三 execute()之sql注入

根本原理:就是根据程序的字符串拼接name=‘%s’,我们输入一个XXX‘--haha’,用我们输入的XXX加‘在程序中拼接成一个判断条件name=‘XXX‘--haha‘

最后那一个空格,在一条sql语句中如果遇到select * from t1 where id>3 -- and name=‘egon‘;则--之后的条件被注释掉了

# 1、sql注入之:用户存在,绕过密码
egon‘   -- 任意字符

# 2、sql注入之:用户不存在,绕过用户和密码
xxx‘ or 1=1 -- 任意字符

  

用户名存在,直接登录成功

用户名不存在,绕过用户和密码

解决方法:

# 原来是我们对sql进行字符串拼接
# sql="select * from userinfo where name=‘%s‘ and password=‘%s‘" %(user,pwd)
# print(sql)
# res=cursor.execute(sql)

#改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了)
sql = "select * from userinfo where name =%s and password=%s"   # 注意%s需要去掉引号,
# 因为pymysql 会自动为我们加上
res = cursor.execute(sql,[user,pwd])    # pymysql模块自动帮我们解决sql注入的问题
print(res)

  

四 增、删、改:conn.commit()

import pymysql

# 链接
conn = pymysql.connect(host=‘192.168.159.128‘, user=‘root‘, password=‘pertest‘, database=‘luffycity‘, charset=‘utf8‘)

# 游标
cursor = conn.cursor()

# 执行sql语句
# 新增
# part1
# sql = "insert into userinfo(name,password) values (‘mike‘,‘123‘);"
# res = cursor.execute(sql)   # 执行sql语句,返回sql影响成功的行数
# print(res)

# par2
sql = "insert into userinfo(name,password) values (%s,%s);"
res = cursor.execute(sql, ("mike2", "123"))   # 执行sql语句,返回sql影响成功的行数
print(res)

# par3,插入多行
sql = "insert into userinfo(name,password) values (%s,%s);"
res = cursor.executemany(sql, [("mike2", "123"), ("mike3", "123"), ("mike4", "123")])   # 执行sql语句,返回sql影响成功的行数
print(res)

conn.commit()   # 提交后才发现表中插入记录成功
cursor.close()
conn.close()

  

五 查:fetchone,fetchmany,fetchall

import pymysql

# 链接
conn = pymysql.connect(host=‘192.168.159.128‘, user=‘root‘, password=‘pertest‘, database=‘luffycity‘, charset=‘utf8‘)

# 游标
cursor = conn.cursor()

# 执行sql语句
sql = ‘select * from userinfo;‘
rows = cursor.execute(sql)  # 执行sql语句,返回sql影响成功的行数rows,将结果放入一个集合,等待被查询

# cursor.scroll(3, mode=‘absolute‘)   # 相对均对位置移动
# cursor.scroll(3, mode=‘relative‘)   # 相对当前位置移动

res1 = cursor.fetchone()
res2 = cursor.fetchone()
res3 = cursor.fetchone()
res4 = cursor.fetchmany(2)
res5 = cursor.fetchall()
print(res1)
print(res2)
print(res3)
print(res4)
print(res5)
print(‘%s row in set(0.00 sec)‘ % rows)

conn.commit()
cursor.close()
conn.close()

  

五 获取插入的最后一条数据的自增ID

import pymysql

# 链接
conn = pymysql.connect(host=‘192.168.159.128‘, user=‘root‘, password=‘pertest‘, database=‘luffycity‘, charset=‘utf8‘)

# 游标
cursor = conn.cursor()

sql = ‘insert into userinfo(name, password) values ("mike6", "123");‘
rows = cursor.execute(sql)
print(cursor.lastrowid)     # 在插入语句后查看

conn.commit()

cursor.close()
conn.close()

  

原文地址:https://www.cnblogs.com/mike-liu/p/9348498.html

时间: 2024-07-30 11:24:31

数据库:pymysql模块的相关文章

第二百七十九节,MySQL数据库-pymysql模块

MySQL数据库-pymysql模块 pymysql模块是python操作数据库的一个模块 connect()创建数据库链接,参数是连接数据库需要的连接参数使用方式: 模块名称.connect() 参数: host=数据库ip port=数据库端口 user=数据库用户名 passwd=数据库密码 db=数据库名称 cursor()创建数据库操作游标,无参使用方式: 游标变量.cursor() execute()操作数据库,参数1 sql语句,参数2 字符串占位符变量使用方式: 游标变量.exe

Python基础(十六)-操作数据库pymysql模块

一.pymysql模块安装 pip3 install pymysql 二.连接数据库 2.1.创建测试数据 mysql> create database AA; mysql> use AA mysql> create table test(id int primary key auto_increment,name varchar(25),passwd varchar(25)); mysql> insert into test(name,passwd) values('AA',12

使用python连接mysql数据库——pymysql模块的使用

安装pymysql pip install pymysql 使用pymysql 使用数据查询语句 查询一条数据fetchone() from pymysql import * conn = connect( host='127.0.0.1', port=3306, user='root', password='123456', database='itcast', charset='utf8') # 创建游标 c = conn.cursor() # 执行sql语句 c.execute("sele

MySQL数据库学习【第十二篇】pymysql模块

一.安装的两种方法 第一种 #安装 pip3 install pymysql 第二种 二.链接,执行sql,关闭(游标) import pymysql user= input('用户名:>>').strip() pwd= input('密码:>>').strip() #先链接,拿到游标 conn=pymysql.connect(host='localhost',user='root',password='123456', database='day47',charset='utf8

Python数据库MySQL之数据备份、pymysql模块

一 IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具 下载链接:https://pan.baidu.com/s/1bpo5mqj 掌握: #1. 测试+链接数据库 #2. 新建库 #3. 新建表,新增字段+类型+约束 #4. 设计表:外键 #5. 新建查询 #6. 备份库/表 #注意: 批量加注释:ctrl+?键 批量去注释:ctrl+shift+?键 二 MySQL数据备份 #1. 物理备份: 直接复制数据库文件,适用于大型数据库环境.但不能恢复到异

Python连接MySQL数据库之pymysql模块使用

Python连接MySQL数据库之pymysql模块使用 Python3连接MySQL PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. Django中也可以使用PyMySQL连接MySQL数据库. PyMySQL安装 pip install pymysql 连接数据库 注意事项 在进行本文以下内容之前需要注意: 你有一个MySQL数据库,并且已经启动. 你有可以连接该数据库的用户名和密码 你有一个有权限操作的datab

数据库 - Navicat与pymysql模块

一.Nabicat 在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时, 可以使用可视化工具Navicat,以图形界面的形式操作MySQL数据库 官网下载:https://www.navicat.com/en/products/navicat-for-mysql 网盘下载:https://pan.baidu.com/s/1bpo5mqj 链接:https://pan.baidu.com/s/1Hu-x0mPuSW3g9CxNFlnAng 密码:pqe5 #

pymysql模块对数据库的操作与备份

今天呢主要对pymysql模块进行使用讲解一下: https://www.cnblogs.com/lilidun/p/6041198.html Linux系统上安装pip3通过这个文档查看   查询操作: import pymysql db = pymysql.connect(host="localhost",user="root",password="",db="lxf",port=3306)# 使用cursor()获取操作

MySQL数据库(五)—— 用户管理、pymysql模块

用户权限管理.pymysql模块 一.用户管理(权限管理) 在MySQL中自带的mysql数据库中有4个表用于用户管理的 # 优先级从高到低 user > db > tables_priv > columns_priv user #该表放行的权限,针对:所有数据,所有库下所有表,以及表下的所有字段 db #该表放行的权限,针对:某一数据库,该数据库下的所有表,以及表下的所有字段 tables_priv #该表放行的权限.针对:某一张表,以及该表下的所有字段 columns_priv #该