• 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,使用共同的会话,即同一个事务

  • 相关阅读:
    PHP实现智能语音播报
    scrapy随机切换user-agent
    scrapy 下载器中间件 随机切换user-agent
    scrapy xpath去除空格
    scrapy 爬虫中间件 deepth深度
    scrapy 爬虫中间件 httperror中间件
    scrapy爬虫中间件-urlLength
    转载:Java 内存区域和GC机制
    JavaScript中对象数组 作业题目以及作业
    【转载】解决nginx负载均衡的session共享问题
  • 原文地址:https://www.cnblogs.com/shijingjing07/p/7843932.html
Copyright © 2020-2023  润新知