zoukankan      html  css  js  c++  java
  • 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,使用共同的会话,即同一个事务

  • 相关阅读:
    2016012061 小学四则运算练习软件项目报告
    阅读《构建之法》的几点思考
    软件工程之我见
    作业五
    结对作业
    第4.17章读书笔记
    week_2 四则运算
    第1.2.16章读书笔记
    我与软件工程
    团队项目Alpha冲刺阶段之学习总结
  • 原文地址:https://www.cnblogs.com/shijingjing07/p/7843932.html
Copyright © 2011-2022 走看看