python pymysql cursors_python pymysql cursor的问题
使用python操作mysql的时候一般都会使用如下语句:
官方示例
import pymysql.cursors
# 连接到数据库后实际上TCP的连接状态是ESTABLISHED
connection = pymysql.connect(host='localhost',
user='user',
password='passwd',
db='db',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
try:
with connection.cursor() as cursor:
sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
cursor.execute(sql, ('webmaster@python.org', 'very-secret'))
#默认不自动提交事务,所以需要手动提交
connection.commit()
with connection.cursor() as cursor:
sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
cursor.execute(sql, ('webmaster@python.org',))
result = cursor.fetchone()
print(result)
finally:
connection.close()
在这段代码里,有一个疑惑的点是,我们现在创建了一个连接,但是实例化了多个cursor,我们可不可以使用同一个连接的同一个cursor来重复使用,代码如下
with connect.cursor() as cursor:
cursor.execute("select * from person limit 1")
print(id(cursor))
data = cursor.fetchone()
print(data)
print("=============")
cursor.execute("select * from person limit 1")
print(id(cursor))
data = cursor.fetchone()
print(data)
上面的代码,我们执行完了之后发现查询操作是可以直接使用的,并且不会产生冲突,我们通过打印cursor的地址发现是同一个cursor。
插入操作
with connect.cursor() as cursor:
for id in range(1, 100, 2):
cursor.execute("insert into test(id)values(%d)"%id)
print(id)
id += 1
cursor.execute("insert into test(id)values(%d)"%id)
time.sleep(2)
print(id)
在单进程单线程环境下依然没有问题
删除
with connect.cursor() as cursor:
for id in range(100):
# cursor.execute("insert into test(id)values(%d)" % id)
cursor.execute("delete from test where id=%s"%id)
time.sleep(5)
time.sleep(10)
也没有问题
但是有博客说多进程环境下会出现问题,我一直想重现,但是没有成功,等以后重现了再来更新。
但是
创建了一个 cursor 以后,建议完成一个事务就 commit 一下,不要一直用它,这样一直使用,并不会和数据库完成数据同步,如果操作太多,提交的时候会超时,造成部分数据更新,部分数据丢失,数据不一致且效率低。
并且握着 cursor 期间,数据库端发生改变,也没法和客户端同步。
python pymysql cursors_python pymysql cursor的问题相关推荐
- Py之PyMySQL:Python库之PyMySQL的简介、安装、使用方法之详细攻略
Py之PyMySQL:Python库之PyMySQL的简介.安装.使用方法之详细攻略 目录 PyMySQL的简介 PyMySQL的安装 PyMySQL的使用方法 PyMySQL的简介 PyMySQL包 ...
- python mysql倒序_day40:MySQL:python操作mysql:pymysql模块SQL注入攻击
目录 part1:用python连接mysql 1.用python连接mysql的基本语法 创建连接conn→创建游标对象cursor→执行sql语句execute→获取数据fetchone→释放游标 ...
- Python数据库编程pymysql
Python数据库编程pymysql 一.数据库编程介绍 数据库编程就是针对数据库的操作,通过编写程序的方式,让程序做为数据库的客户端进行数据库操作. 对于MySQL的操作我们可以通过SQL语句,但是 ...
- python下载pymysql_Python pymysql
安装 安装mysql数据库的难度和oracle数据库简直没得比,安装步骤如下: 安装MariaDB yum install mariadb mariadb-server # 安装,centos7默认的 ...
- 【python】之pymysql模块,操作mysql数据库!
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBM ...
- Python 3 —— 使用 PyMySQL 操作 MySQL8
PyMySQL 是一个纯 Python 实现的 MySQL 客户端操作库,支持事务.存储过程.批量执行等. PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Py ...
- python数据库pymysql_Python——数据库04 Python操作MySQL pymysql模块使用,python,04python,MySQLpymysql...
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. Django中也可以使用PyMySQL连接MySQL数据库. PyMySQ ...
- python pymysql_python使用pymysql实现操作mysql
pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持3.x版本. 适用环境 python版本 >=2.6或 ...
- Python教程和PyMySQL数据库导航
介绍 按顺序显示记录可能会有些棘手,因为通常不会按字母顺序输入记录,并且如果ID编号未按1递增,使用记录ID来控制导航将不起作用.一个表中有10条记录(从1到10),已删除记录3.7和9,从而弄乱了顺 ...
最新文章
- 2.1.2 数据通信基础知识
- 节后开工,请把这9句话写在你的办公桌上!
- Mac系统下安装Homebrew后无法使用brew命令
- CDH 组件升级:zookeeper升级到 3.4.14
- Android通知点击事件传递参数
- Quartz.net官方开发指南 第七课 : TriggerListeners和JobListeners
- jdk生成keystore、tomcat配置https
- redis未授权反弹shell
- Struts秘籍之起式:第1.6式:管理Struts配置文件
- 【预测模型】基于VMD结合Elman神经网络预测数据matlab代码
- 可道云kodexplorer隐藏免费版按钮及简单修改使用方法
- IMazing for Mac破解版永久激活方法
- Springboot中引入本地jar包,并通过maven打包(解决maven丢包的问题)
- 【计算机视觉】张正友棋盘格标定法
- 我真的很郁闷,应该振作起来的
- 聊聊ADAMoracle去中心化预言机网络服务介绍
- 魔兽RPG地图破解及修改方法
- workerman 7272端口被占用
- (精)反激式开关电源
- 用FastAPI加爬虫制作一个涩图API,521就这样自己过。
热门文章
- linux 开发组织模式,Linux内核发布模式与开发组织模式(1)
- 一文带你学C语言,详细知识点思维导图!
- C语言中三块“难啃的硬骨头”
- java 多线程池_Java项目中,线程池中线程数量太大会有什么影响?
- linux下模仿用户左键,linux 鼠标左右键互换实现代码
- 当计算机从硬盘读取数据后 将数据,当计算机从硬盘读取数据后,将数据暂时储存在于()...
- java堆内存 和栈内存
- FTP开启被动连接模式
- MySQL语言解析----1
- tomcat源码阅读之Server和Service接口解析