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事务的更多相关文章

  1. Odoo 后端数据库postgreSQL事务级别

    Table of Contents 事务的特性 并行事务的问题 事务隔离级别 Odoo事务隔离级别 odoo事务控制         事务的特性 事务4个特性,简写未ACID 原子性(Atomicit ...

  2. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

  3. SQLServer事务同步下如何收缩日志

    事务同步是SQLServer做读写分离的一种常用的方式. 随着业务数据的不断增长,数据库积攒了大量的日志,为了腾出硬盘空间,需要对数据库日志进行清理 订阅数据库的日志清理 因为订阅数据库所有的数据都来 ...

  4. 事务日志已满,原因为“ACTIVE_TRANSACTION”

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 异常处理汇总-数据库系列  http://www.cnblogs.com/dunitia ...

  5. Mysql事务探索及其在Django中的实践(二)

    继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...

  6. Mysql事务探索及其在Django中的实践(一)

    前言 很早就有想开始写博客的想法,一方面是对自己近期所学知识的一些总结.沉淀,方便以后对过去的知识进行梳理.追溯,一方面也希望能通过博客来认识更多相同技术圈的朋友.所幸近期通过了博客园的申请,那么今天 ...

  7. CRL快速开发框架系列教程七(使用事务)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  8. 玩转spring boot——结合JPA事务

    接着上篇 一.准备工作 修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...

  9. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

随机推荐

  1. 《Java设计模式》之模板方法模式

    模板方法模式是类的行为模式.准备一个抽象类.将部分逻辑以详细方法以及详细构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类能够以不同的方式实现这些抽象方法,从而对剩余的逻辑有 ...

  2. android.telephony.SmsManager.sendMultipartTextMessage

    smsManager.sendMultipartTextMessage(destAddress, null, divideContents, sentIntents, null); next step ...

  3. KVM虚拟机的创建、管理与迁移

    [日期:2012-06-01] KVM虚拟机管理 一.环境 role         hostname    ip                  OS kvm_server   target   ...

  4. Pinyin4j导读

    Pinyin4j是Java中的拼音库,作者李民. 拼音这件事其实非常简单,无非是一种映射.但是拼音中包含的学问很多,很多前贤都研究过汉语拼音,提出了多种拼音方案.随着历史变迁,拼音的形式也在不断发生变 ...

  5. iOS 设备屏幕上实时打印 Log 的小工具

    需求 写这个小工具的想法,主要来源于很多团队都会用友盟.TalkingData 等第三方框架做自定义事件统计:不过统计代码加好之后,没有很好的方法来让测试工程师验证一下事件加上了没有,调用次数有没有重 ...

  6. ubuntu安装wkhtmltopdf

    下载安装wkhtmltox系统环境 http://wkhtmltopdf.org/downloads.html wget https://bitbucket.org/wkhtmltopdf/wkhtm ...

  7. zabbix邮件告警之 通过shell脚本发送告警

    说明:本文讲如何通过shell脚本实现zabbix发送告警邮件,共有5步1.设置mailx账号:是配置mailx的发信账号2.zabbix服务器端编写邮件发送脚本:是增加zabbix的告警方式,增加通 ...

  8. Nginx+FastCGI运行原理(二)

    1.4 PHP与PHP-FPM的安装及优化(2) 标签rlimit_files用于设置PHP-FPM对打开文件描述符的限制,默认值为1024.这个标签的值必须和Linux内核打开文件数关联起来,例如, ...

  9. C++ map,set内部数据结构

    1)Set是一种关联容器,它用于存储数据,并且能从一个数据集合中取出数据.它的每个元素的值必须唯一,而且系统会根据该值来自动将数据排序.每个元素的值不能直接被改变.[重点]内部结构采用红黑树的平衡二叉 ...

  10. 【IL】IL指令详解

    名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且 ...