gpt4 book ai didi

用于创建 SQL Server 数据库备份文件的 Python 脚本(使用 pyodbc)

转载 作者:行者123 更新时间:2023-12-04 09:45:53 24 4
gpt4 key购买 nike

我正在尝试编写一个 python 脚本来备份 SQL Server 数据库,然后将其还原到新数据库中。

在 SQL Server 中运行时,SQL 脚本本身似乎工作正常:

BACKUP DATABASE TEST_DB
TO DISK = 'D:/test/test_db.BAK';

但是,当我尝试从 python 脚本运行它时,它失败了:
con = pyodbc.connect('UID=xx; PWD=xxxxxx, driver='{SQL Server}', server=r'xxxxxx', database='TEST_DB')
sql_cursor = con.cursor()
query = ("""BACKUP DATABASE TEST_DB
TO DISK = 'D:/test/test_db.BAK';""")
con.autocommit = True
sql_cursor.execute(query1)
con.commit()

首先,如果我不添加“con.autocommit = True”行,它将失败并显示以下消息:
Cannot perform a backup or restore operation within a transaction. (3021)

不知道什么是交易。我在另一篇文章中读到“con.autocommit = True”这一行消除了错误,确实如此。我不知道为什么。

最后,当我在 con.autocommit 设置为 True 的情况下运行 python 脚本时,不会引发任何错误,BAK 文件可以暂时在预期的位置('D:/test/test_db.BAK')看到,但是当脚本完成时运行时,BAK 文件消失(????)。有谁知道为什么会这样?

最佳答案

解决方案,如 this GitHub issue 中所述, 是调用.nextset()执行 BACKUP 后重复陈述 ...

crsr.execute(backup_statement)
while (crsr.nextset()):
pass

...“使用” BACKUP 发出的进度消息.如果在关闭连接之前没有使用这些消息,则 SQL Server 会认为出现问题并取消备份。

SSMS 显然可以直接捕获这些消息,但是 ODBC 连接必须发出对 ODBC SQLMoreResults 的调用。函数来检索每条消息,这就是我们调用 pyodbc .nextset() 时发生的情况方法。

关于用于创建 SQL Server 数据库备份文件的 Python 脚本(使用 pyodbc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62119382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com