Форум сайта python.su
сделал такой скрипт:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import pymssql
conn = pymssql.connect(host='127.0.0.1', user='auto', password='auto', database='torg')
cur = conn.cursor()
cur.execute("BACKUP DATABASE torg TO DISK = 'e:\torg.bak' with init")
conn.close()
Отредактировано (Июль 3, 2009 07:13:49)
Офлайн
pymssql сама оборачивает запрос в begin tran - commit (rollback).
o7412369815963Менять код pymssql, использовать другую библиотеку, вынести бэкап в отдельный от программы скрипт и запускать из CMD-файла.
что делать?
Отредактировано (Июль 3, 2009 08:59:19)
Офлайн
Извнияюсь за возможно глупый ответ от человека, который не пользовался pymssql вообще :)
Первое, что бросилось в глаза, это ‘e:\torg.bak’… \t не эскейпится случайно ли в символ TAB?
Отредактировано (Июль 3, 2009 12:27:51)
Офлайн
igor.kaistДо этого не доходит просто. Ругалось бы по-другому.
не эскейпится случайно ли в символ TAB?
Отредактировано (Июль 3, 2009 12:37:51)
Офлайн
Как вариант, можно через odbc к mssql подключиться. Более муторно, но все же…
Офлайн
а если перед отправкой запроса “бекапа”, отправить запрос об закрытии транзакции?
Офлайн
conn = pymssql.connect(host='127.0.0.1', user='auto', password='auto', database='torg')
cur = conn.cursor()
print 'exec'
cur.execute("commit tran")
cur.execute("BACKUP DATABASE torg TO DISK = 'e:\\torg.bak' with init")
cur.execute("begin tran")
conn.close()
Офлайн
Хак в чистом виде :)
Только лучше уж сначала проверить, существует ли транзакция, прежде чем делать commit. Кстати, а почему commit, а не rollback?
Офлайн
Lexanderтак, на скорую руку написал. по идее должно быть бе разницы, изменений же никаких не производиться.
Хак в чистом виде :)
Только лучше уж сначала проверить, существует ли транзакция, прежде чем делать commit. Кстати, а почему commit, а не rollback?
Офлайн
o7412369815963Для сервера БД это важно. Он все равно выполняет работу с системными таблицами, логом транзакций. Я по памяти не могу сказать какую команду оптимальнее использовать. Лучше об этом почитать в BOL.
по идее должно быть бе разницы
o7412369815963Средствами сервера - проверить значение @@TRANCOUNT, может быть сама библиотека может выдать инфу об открытых транзакциях.
а как можно проверить включена ли транзакция?
Отредактировано (Июль 3, 2009 18:22:30)
Офлайн