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. 一个成功的 Git 分支模型

    在这篇文章中介绍的开发模型在大约一年前已经在我的私有项目和工作引入的,而且已经被证明是非常成功的.我想写一些关于这个模型的东西已经好一段时间了,但是一直苦于没有时间,不过现在可以了.我不想探讨任何项目 ...

  2. uri.js的用法事例

    来源于:http://smoothprogramming.com/tutorials/get-set-query-string-values-from-url-using-uri-js/ Get or ...

  3. JDBC连接方式有哪几种

    2011-05-10 目前比较常见的JDBC驱动程序可分为以下四个种类:  (1)JDBC-ODBC桥加ODBC驱动程序  JavaSoft桥产品利用ODBC驱动程序提供JDBC访问.注意,必须将OD ...

  4. perf之record

    如果CPU的使用率突然暴涨,如何迅速定位是哪个进程.哪段代码引起的呢?我们需要一个profiling工具,对CPU上执行的代码进行采样.统计,告诉我们CPU到底在忙些什么. perf 就是这样的工具. ...

  5. Cordova笔记(一)

    跨平台的PhoneGap被Adobe收购,改名为Cordova,现在是Apache下的一款开源软件.网上能找到的关于PhoneGap的教程有些方法已不适用,在学习使用最新版的Cordova时有些问题需 ...

  6. 看过这两张图,就明白 Buffer 和 Cache 之间区别

    Buffer常见的是这个: 对,就是铁道端头那个巨大的弹簧一类的东西.作用是万一车没停住,撞弹簧上减速慢,危险小一些.叫缓冲. Cache常见的是这个: 没错,就是一种保管箱.看到右边那个被锈掉的Fo ...

  7. Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

    一般为AndroidManifest.xml中的activity的问题 这次主要是因为activity在另外一个package里面,但是package名称第一次字母是大写,所以出错 把package名 ...

  8. 解决Mac上adb: command not found问题

    使用mac进行开发的时候,有时候需要使用adb指令来进行一些操作,但是如果没有配置过Android环境变量,可能会出现adb: command not found的问题,查了一些资料,这里记录一下ma ...

  9. [转]postgre 系统表对象说明

    一.pg_class: 该系统表记录了数据表.索引(仍然需要参阅pg_index).序列.视图.复合类型和一些特殊关系类型的元数据.注意:不是所有字段对所有对象类型都有意义. 名字 类型 引用 描述 ...

  10. FileZilla FTP 登录 问题

    1.一直报错220 (vsFTPd 3.0.2)-AUTH TLS 将加密方式选择为 “只是用普通FTP(不安全)”模式即可 2.服务器发回了不可路由的地址 “传输设置”,传输模式设置为主动.