psycopg事务
1.事务的特性
原子性,要么完成,要么都不完成
2.psycopg的事务特点
在psycopg中,事务是由connection
处理的,当第一次一个命令发送给数据库时(开启数据库操作游标),
一个事务就建立了。接下来的sql命令都会在这个事务中执行,不仅仅是这个游标的sql操作命令,其他的只要是同一个连接connection
开启的游标,sql命令都会在这一个事务中进行。
如果有任何sql命令执行失败,事务将终止,不会再有sql命令执行,直到执行了rollback()
方法。
代码示例如下:
import psycopg2
conn = psycopg2.connect(host='127.0.0.1', port=5432, user='postgres', password='1', database='postgres')
cursor = conn.cursor()
cursor.execute('insert into test(a,b) values(%s,%s)',(3,'huiyunyun'))
cursor.execute('SELECT a,b FROM test')
data_list = cursor.fetchall()
for item in data_list:
print(item[0])
print('---------')
cursor.close()
cursor = conn.cursor()
cursor.execute('SELECT a,b FROM test')
data_list = cursor.fetchall()
for item in data_list:
print(item[0])
print('---------')
cursor.close()
conn.close()
conn = psycopg2.connect(host='127.0.0.1', port=5432, user='postgres', password='1', database='postgres')
cursor = conn.cursor()
cursor.execute('SELECT a,b FROM test')
data_list = cursor.fetchall()
for item in data_list:
print(item[0])
print('---------')
cursor.close()
conn.close()
运行结果:
【1.png】
connection
负责终止事务,执行commit()
或者rollback()
方法。
关闭连接close()
或销毁连接del
事务默认rollback
。
3.自动提交
设置连接为autocommit
模式,命令会自动提交,持久化到数据库。
4.with语句使用
示例如下:
with psycopg2.connect(DSN) as conn:
with conn.cursor() as curs:
curs.execute(SQL)
当connection
结束时,没有异常发生,事务commit,否则rollback,结束事务,但是不会调用close()
关闭连接;
当cursor
结束时,会释放与其相关的资源,但事务不会有影响
conn = psycopg2.connect(DSN)
with conn:
with conn.cursor() as curs:
curs.execute(SQL1)
with conn:
with conn.cursor() as curs:
curs.execute(SQL2)
conn.close()
5.线程安全
多线程使用数据库有两种方式
1)每个线程创建一个connection
,使用单独的会话
2)使用相同的connection
,使用共同的会话,即同一个事务
psycopg事务的更多相关文章
- Odoo 后端数据库postgreSQL事务级别
Table of Contents 事务的特性 并行事务的问题 事务隔离级别 Odoo事务隔离级别 odoo事务控制 事务的特性 事务4个特性,简写未ACID 原子性(Atomicit ...
- Spring基于AOP的事务管理
Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...
- SQLServer事务同步下如何收缩日志
事务同步是SQLServer做读写分离的一种常用的方式. 随着业务数据的不断增长,数据库积攒了大量的日志,为了腾出硬盘空间,需要对数据库日志进行清理 订阅数据库的日志清理 因为订阅数据库所有的数据都来 ...
- 事务日志已满,原因为“ACTIVE_TRANSACTION”
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 异常处理汇总-数据库系列 http://www.cnblogs.com/dunitia ...
- Mysql事务探索及其在Django中的实践(二)
继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...
- Mysql事务探索及其在Django中的实践(一)
前言 很早就有想开始写博客的想法,一方面是对自己近期所学知识的一些总结.沉淀,方便以后对过去的知识进行梳理.追溯,一方面也希望能通过博客来认识更多相同技术圈的朋友.所幸近期通过了博客园的申请,那么今天 ...
- CRL快速开发框架系列教程七(使用事务)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 玩转spring boot——结合JPA事务
接着上篇 一.准备工作 修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...
- MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
随机推荐
- 《Java设计模式》之模板方法模式
模板方法模式是类的行为模式.准备一个抽象类.将部分逻辑以详细方法以及详细构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类能够以不同的方式实现这些抽象方法,从而对剩余的逻辑有 ...
- android.telephony.SmsManager.sendMultipartTextMessage
smsManager.sendMultipartTextMessage(destAddress, null, divideContents, sentIntents, null); next step ...
- KVM虚拟机的创建、管理与迁移
[日期:2012-06-01] KVM虚拟机管理 一.环境 role hostname ip OS kvm_server target ...
- Pinyin4j导读
Pinyin4j是Java中的拼音库,作者李民. 拼音这件事其实非常简单,无非是一种映射.但是拼音中包含的学问很多,很多前贤都研究过汉语拼音,提出了多种拼音方案.随着历史变迁,拼音的形式也在不断发生变 ...
- iOS 设备屏幕上实时打印 Log 的小工具
需求 写这个小工具的想法,主要来源于很多团队都会用友盟.TalkingData 等第三方框架做自定义事件统计:不过统计代码加好之后,没有很好的方法来让测试工程师验证一下事件加上了没有,调用次数有没有重 ...
- ubuntu安装wkhtmltopdf
下载安装wkhtmltox系统环境 http://wkhtmltopdf.org/downloads.html wget https://bitbucket.org/wkhtmltopdf/wkhtm ...
- zabbix邮件告警之 通过shell脚本发送告警
说明:本文讲如何通过shell脚本实现zabbix发送告警邮件,共有5步1.设置mailx账号:是配置mailx的发信账号2.zabbix服务器端编写邮件发送脚本:是增加zabbix的告警方式,增加通 ...
- Nginx+FastCGI运行原理(二)
1.4 PHP与PHP-FPM的安装及优化(2) 标签rlimit_files用于设置PHP-FPM对打开文件描述符的限制,默认值为1024.这个标签的值必须和Linux内核打开文件数关联起来,例如, ...
- C++ map,set内部数据结构
1)Set是一种关联容器,它用于存储数据,并且能从一个数据集合中取出数据.它的每个元素的值必须唯一,而且系统会根据该值来自动将数据排序.每个元素的值不能直接被改变.[重点]内部结构采用红黑树的平衡二叉 ...
- 【IL】IL指令详解
名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且 ...