pymysql的基本使用
序
当我们在写程序中需要使用到数据库的时候,尽量在代码层次实现一些限制,例如两张表,我们不再使用外键去关联表与表之间的关系,我们可以在程序层面修改其中的一张表,再去修改另一张表的数据,这样会减轻数据库的压力,代码层次可以实现的,就不要再去使用数据库。
pymysql的语法
import pymysql # 下载并导入pymysql模块
# 建立连接,并产生一个连接会话对象
conn = pymysql.connect(
user='root',
password='123',
host='127.0.0.1',
port=3306, # 注意:端口号不需要用引号引起来
charset='utf8',
database='db1'
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 产生一个游标对象
# cursor=pymysql.cursors.DictCursor 将查询出来的结果制作成字典的形式返回
# 若不加,则返回的是括号加数据,例如:(1, 张三),不会显示表中的字段,很不方便
sql = 'select * from user_info' # 语句后可不加分号,pymysql会自动添加
res = cursor.execute(sql) # 执行sql语句
# print(res) # execute返回的是当前sql语句所影响的行数,并不是查询结构
# ret = cursor.fetchone() # 只获取查询的结果中的一条数据
# ret = cursor.fetchall() # 获取查询结果的全部数据
# ret = cursor.fetchmany(2) # 获取指定行数的数据,如果数字超了,也不会报错
# print(ret)
print(cursor.fetchone())
print(cursor.fetchone()) # 连续使用2次,并不会重复展示表中的第一条数据,执行一次取掉一次数据,执行第二次就取表中的第二行数据
# 相对移动
cursor.scroll(2, 'relative') # 基于指针所在的位置 往后偏移
# 绝对移动
cursor.scroll(1, 'absolute') # 基于起始位置,往后偏移
sql注入问题
import pymysql # 下载并导入pymysql模块
# 建立连接,并产生一个连接会话对象
conn = pymysql.connect(
user='root',
password='123',
host='127.0.0.1',
port=3306, # 注意:端口号不需要用引号引起来
charset='utf8',
database='db1'
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 产生一个游标对象
# cursor=pymysql.cursors.DictCursor 将查询出来的结果制作成字典的形式返回
# 若不加,则返回的是括号加数据,例如:(1, 张三),不会显示表中的字段,很不方便
sql = 'select * from user_info' # 语句后可不加分号,pymysql会自动添加
res = cursor.execute(sql) # 执行sql语句
# print(res) # execute返回的是当前sql语句所影响的行数,并不是查询结构
# ret = cursor.fetchone() # 只获取查询的结果中的一条数据
# ret = cursor.fetchall() # 获取查询结果的全部数据
# ret = cursor.fetchmany(2) # 获取指定行数的数据,如果数字超了,也不会报错
# print(ret)
print(cursor.fetchone())
print(cursor.fetchone()) # 连续使用2次,并不会重复展示表中的第一条数据,执行一次取掉一次数据,执行第二次就取表中的第二行数据
# 相对移动
cursor.scroll(2, 'relative') # 基于指针所在的位置 往后偏移
# 绝对移动
cursor.scroll(1, 'absolute') # 基于起始位置,往后偏移
利用特殊符号和注释语法 巧妙的绕过真正的sql校验
关键性的数据 不要自己手动去拼接 而是交由execute帮你去做拼接
采用手动拼接的情况
import pymysql
conn = pymysql.connect(
user='root',
password='123',
host='localhost',
port=3306,
charset='utf8',
database='db1'
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
username = input('username>>').strip()
password = input('password>>').strip()
sql = "select * from user_info where name = '%s' and password = '%s'" % (username, password)
# sql = 'select * from user_info where name = "%s" and password = "%s"' % (username, password)
# select * from user_info where name = "张三' -- fhjkasdhfkla" and password = "" 外层使用单引号出不来效果
print(sql)
cursor.execute(sql)
res = cursor.fetchall()
if res:
print(res)
else:
print('username or password error!')


解决办法:
交给pymysql中的execute进行处理
import pymysql
conn = pymysql.connect(
user='root',
password='123',
host='localhost',
port=3306,
charset='utf8',
database='db1'
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
username = input('username>>').strip()
password = input('password>>').strip()
# sql = "select * from user_info where name = '%s' and password = '%s'" % (username, password)
# sql = 'select * from user_info where name = "%s" and password = "%s"' % (username, password)
# select * from user_info where name = "张三' -- fhjkasdhfkla" and password = "" 外层使用单引号出不来效果
sql = "select * from user_info where name = %s and password = %s"
print(sql)
# cursor.execute(sql)
cursor.execute(sql, (username, password))
res = cursor.fetchall()
if res:
print(res)
else:
print('username or password error!')

数据的增删查改
尝试进行增操作:
import pymysql
conn = pymysql.connect(
user='root',
password='123',
host='localhost',
port=3306,
charset='utf8',
database='db1'
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = 'insert into user_info(name, password) value("刘和平", 17)'
res = cursor.execute(sql)
print(res)

让我们去表中看看,是否增加上去:

显然,并没有新增一条数据。
在pymysql中,如果进行增删改等操作,对于这些执行重要程度偏高的语句,需要有一步确认操作(commit):
import pymysql
conn = pymysql.connect(
user='root',
password='123',
host='localhost',
port=3306,
charset='utf8',
database='db1'
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = 'insert into user_info(name, password) value("刘和平", 17)'
res = cursor.execute(sql)
conn.commit() # 提交
print(res)

观察表中的数据:

pymysql的基本使用的更多相关文章
- pyMysql
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...
- Python 3.x 连接数据库(pymysql 方式)
==================pymysql=================== 由于 MySQLdb 模块还不支持 Python3.x,所以 Python3.x 如果想连接MySQL需要安装 ...
- Python中操作mysql的pymysql模块详解
Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...
- 杂项之pymysql连接池
杂项之pymysql连接池 本节内容 本文的诞生 连接池及单例模式 多线程提升 协程提升 后记 1.本文的诞生 由于前几天接触了pymysql,在测试数据过程中,使用普通的pymysql插入100W条 ...
- Python3中使用PyMySQL连接Mysql
Python3中使用PyMySQL连接Mysql 在Python2中连接Mysql数据库用的是MySQLdb,在Python3中连接Mysql数据库用的是PyMySQL,因为MySQLdb不支持Pyt ...
- Python之路-python(mysql介绍和安装、pymysql、ORM sqlachemy)
本节内容 1.数据库介绍 2.mysql管理 3.mysql数据类型 4.常用mysql命令 创建数据库 外键 增删改查表 5.事务 6.索引 7.python 操作mysql 8.ORM sqlac ...
- python pymysql和orm
pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 1. 安装 管理员打开cmd,切换到python的安装路径,进入到Scripts目录下(如:C:\Users\A ...
- python成长之路【第十三篇】:Python操作MySQL之pymysql
对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎 ...
- (转)pymysql 连接mysql数据库---不支持中文解决
往数据库里插入中文时出现异常:UnicodeEncodeError: 'latin-1' codec can't encode characters 就是编码的问题,pymysql默认的编码是lati ...
- 循序渐进Python3(十)-- 1 -- pymysql
使用pymsql 模块操作数据库 #!/usr/bin/env python , ),()]), user='root', passwd='123456', db='test')# 创建游标curso ...
随机推荐
- 企业如何做好B2C电商平台
导语本文主要讲了两个方面:1.企业如何定位B2C电商平台:2.企业做B2C遇到的问题. 一.企业如何定位B2C电商平台传统企业做B2C电子商务一般选用品牌.渠道.平台模式这三种,品牌模式是在网上建立一 ...
- python 遍历一个数组
list_test =[1,2,3,4,5] for i in range(0,len(list_test)): print(i) 结果是 1 2 3 4 5 注意 for i in range 是前 ...
- Linux中Swap与Memory内存简单介绍
1.背景介绍 这篇文章介绍一下Linux中swap与memory.对于memory没什么可说的就是机器的物理内存,读写速度低于cpu一个量级,但是高于磁盘不止一个量级.所以,程序和数据如果在内存的 ...
- Redis for OPS 02:消息订阅和事务管理
写在前面的话 上一节谈了 Redis 的安装以及五种基本数据类型的一些简单的操作,本章节主要看看 Redis 的另外一些特征,虽然可能不常用,但是还是需要了解的.对于我们运维人员来讲,这些东西更像拓展 ...
- Redis深度历险,全面解析Redis14个核心知识点
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取. 传送门: ...
- MySQL学习——操作表
MySQL学习——操作表 摘要:本文主要学习了使用DDL语句操作表的方法. 创建表 语法 create table 表名 [表定义选项] [表选项]; 表定义选项 用来创建定义表的结构,由列名(col ...
- Winform中怎样获取项目图片资源并转换为Image对象
场景 DevExpress的TreeList怎样给树节点设置图标: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10274554 ...
- 微信小程序使用weui构建搜索栏(searchbar)+导航(navbar)
首先需要在lib目录中添加weui.wxss.searchbar和navbar结合主要解决两者的层次问题,即搜索框输入时,下方的检索结果能够覆盖住navbar.下面就开始发码啦: (1)wxml部分: ...
- Django和前端用ajax传输json等数据
需要传输的是下图中所有的input中客户端设置的数据 整个页面是用js生成,代码不长,但是用了许多拼接,看起来开比较乱,页面的核心就是下面的部分,有一些关键参数部分就不放了,可以跳过这个 下面开始重点 ...
- unbuntu更换软件源
编辑/etc/apt/sources.list文件,将文件中原有的国外源全部注释掉,文件头添加以下内容 ##中科大源 deb https://mirrors.ustc.edu.cn/ubuntu/ b ...