python运行sql文件且失败可以回滚

Posted 神的孩子都在歌唱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python运行sql文件且失败可以回滚相关的知识,希望对你有一定的参考价值。

前言

公司需要一个能对数据库升级脚本,也就是执行sql文件,并且需要有事务错误回滚

首先我们连接到数据库,然后将 autocommit 设置为 False,这样才能启用事务。

接下来,我们打开 SQL 文件,并将其内容读入变量 sql_file。然后,我们使用游标执行 SQL 语句。

如果在执行过程中出现错误,则会触发异常,并在 except 块中执行回滚操作。如果没有出现错误,则会在 try 块中执行提交操作。

最后,我们关闭连接。

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import psycopg2

# 数据库文件
fileSql = "test.sql"
# 数据库地址
host = ""
# 数据库名
database = ""
# 用户名
user = ""
#  密码
password = ""
# 数据库开放端口
port = 5432


def sqlUpdate():
    try:
        conn = psycopg2.connect(
            host=host,
            database=database,
            user=user,
            password=password,
            port=port
        )
        conn.autocommit = False
        cur = conn.cursor()
        with open(fileSql, encoding="utf-8") as f:
            cur.execute(f.read())
        conn.commit()
    except Exception as e:
        conn.rollback()

        print("Transaction rolled back: ".format(e))
        raise e
    finally:
        cur.close()
        conn.close()


if __name__ == '__main__':
    sqlUpdate()

本人csdn博客:https://blog.csdn.net/weixin_46654114
转载说明:跟我说明,务必注明来源,附带本人博客连接。

以上是关于python运行sql文件且失败可以回滚的主要内容,如果未能解决你的问题,请参考以下文章

如果任何语句失败,将回滚的 SQL 查询

sql 事务更改脚本,回滚失败

sql 可以运行,但是当你用 sqlalchemy 运行 python 代码时你失败了

SQL Server,C#:事务回滚超时异常

从SQL代理作业调用时,工作存储过程失败

在 Apache spark SQL 中,我们可以回滚事务吗