4

私は2つのケースでT-SQLクエリを実行しようとします(私はWin7、python 3.2、MS SQL Server Express 2008、python 3.2のpyodbcを使用しています):

-ケース 1:

MS SQL Server Management Studio を使用して、クエリを実行しようとしています:

USE master;CREATE DATABASE Sales ON (NAME = Sales_dat,FILENAME = 'C:\saledat.mdf',        SIZE = 10,    MAXSIZE = 50,    FILEGROWTH = 5 ) LOG ON ( NAME = Sales_log,    FILENAME = 'C:\salelog.ldf',    SIZE = 5MB,    MAXSIZE = 25MB, FILEGROWTH = 5MB );

成功した結果を返します

-ケース 2:

import pyodbc
cxnn=pyodbc.connect('DSN=SERVER;UID=sa;PWD=password')
cur=cxnn.cursor()
cur.execute("USE master;CREATE DATABASE Sales ON (NAME = Sales_dat,FILENAME = 'C:\saledat.mdf',    SIZE = 10,    MAXSIZE = 50,    FILEGROWTH = 5 ) LOG ON ( NAME = Sales_log,    FILENAME = 'C:\salelog.ldf',    SIZE = 5MB,    MAXSIZE = 25MB, FILEGROWTH = 5MB );")
cxnn.commit()

しかし、コードを実行した後、エラーが発生します

 pyodbc.Error: ('HY000', 'The driver did not supply an error!')

なしでコードを実行すると

cxnn.commit()

エラーはありません。しかし、なぜ?

4

2 に答える 2

3

よくわからない理由で、autocommit を true に設定すると問題が解決するようです。バックスラッシュをエスケープする必要があることに注意してください。

自動コミットは、次の 2 つの方法で設定できます。

cxnn=pyodbc.connect('DSN=SERVER;UID=sa;PWD=password', autocommit=True)

または:

cxnn=pyodbc.connect('DSN=SERVER;UID=sa;PWD=password')
cxnn.autocommit = True

それが完了したら、カーソルを作成してクエリを実行すると、期待どおりに実行されます。

cur=cxnn.cursor()
cur.execute("USE master;CREATE DATABASE Sales ON (NAME=Sales_dat, FILENAME='C:\\saledat.mdf', SIZE=10, MAXSIZE=50, FILEGROWTH=5) LOG ON (NAME=Sales_log, FILENAME='C:\\salelog.ldf', SIZE=5MB, MAXSIZE=25MB, FILEGROWTH=5MB );")
于 2013-01-29T07:49:58.723 に答える