sql-server - 在 SQL Server 2008 上使用 sqlalchemy 等待数据库还原完成

标签 sql-server tsql sqlalchemy restore pyodbc

我正在尝试在开发过程中自动化我的数据库恢复,在 SQL Server 2008 上使用 TSQL,使用 sqlalchemy 和 pyodbc 作为传输。

我正在执行的命令是:

"""创建数据库数据库名

从磁盘恢复数据库 dbname='C:\Backups\dbname.bak' WITH REPLACE,MOVE 'dbname_data' TO 'C:\Databases\dbname_data.mdf',MOVE 'dbname_log' TO 'C:\Databases\dbname_log .ldf'"""

不幸的是,在 SQL Management Studio 中,代码运行后,我看到数据库仍处于“正在恢复...”状态。

如果我通过 Management Studio 恢复,它就可以工作。如果我使用子进程调用“sqlcmd”,它就可以工作。 pymssql 在身份验证方面存在问题,甚至没有做到这一点。

可能出了什么问题?

最佳答案

BACKUP 和 RESTORE 语句异步运行,因此它们不会在继续执行其余代码之前终止。

使用 http://ryepup.unwashedmeme.com/blog/2010/08/26/making-sql-server-backups-using-python-and-pyodbc/ 中描述的 while 语句为我解决了这个问题:

# setup your DB connection, cursor, etc
cur.execute('BACKUP DATABASE ? TO DISK=?', 
            ['test', r'd:\temp\test.bak'])
while cur.nextset():
    pass

关于sql-server - 在 SQL Server 2008 上使用 sqlalchemy 等待数据库还原完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4254581/

相关文章:

python - Sqlalchemy、zope 事务和 .user 属性

c# - 从庞大的数据库中选择 id

sql-server - Azure VM 上 SQL Server 的连接字符串

sql - 禁用 SQLCMD 语法检查

.net - 在 Sql server 2005 中过滤 unicode 列 - 多数据匹配

sql-server - T-SQL : Conditionally joining using a parameter

python - GeoAlchemy2 存储点和查询结果

sql - 选择主值处于禁用状态且子值处于事件状态的行

sql-server - 在时间线 SQL Server 中对事件进行分组

python - sqlalchemy 中关于另一个应用程序创建的新行的通知