16

Windows 7 で ActivePython 2.7.2.5 を使用しています。

以下のコードを使用して pyodbc モジュールで sql-server データベースに接続しようとすると、その後のトレースバックを受け取ります。私が間違っていることについてのアイデアはありますか?

コード:

import pyodbc
driver = 'SQL Server'
server = '**server-name**'
db1 = 'CorpApps'
tcon = 'yes'
uname = 'jnichol3'
pword = '**my-password**'

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=server;DATABASE=db1;UID=uname;PWD=pword;Trusted_Connection=yes')
cursor = cnxn.cursor()
cursor.execute("select * from appaudit_q32013")
rows = cursor.fetchall()
for row in rows:
    print row

トレースバック:

Traceback (most recent call last):
  File "pyodbc_test.py", line 9, in <module>
    cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=server;DATABASE=db1;UID=uname;PWD=pword;Trusted_Connection=yes')
pyodbc.Error: ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect); [01000] [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()). (53)')
4

6 に答える 6

27

の接続文字列を使用しています。 というサーバー、 などのデータベース'DRIVER={SQL Server};SERVER=server;DATABASE=db1;UID=uname;PWD=pword;Trusted_Connection=yes'に接続しようとしています。以前に設定した変数は使用されず、使用されません。serverdb1

接続文字列パラメーターをキーワード引数としてconnect関数に渡すことができるため、次を使用できます。

cnxn = pyodbc.connect(driver='{SQL Server}', host=server, database=db1,
                      trusted_connection=tcon, user=uname, password=pword)
于 2013-09-17T22:28:44.097 に答える
3

別の理由でこのエラーに直面していました。
私のサーバーにはアドレスとは別に「ポート」があったためです。
接続文字列の「サーバー」パラメーターに次の値を割り当てることで、これを修正できました。

"...;Server=<server_name>,<port#>;..."

「コロン」/「ピリオド」ではなく「カンマ」であることに注意してください。

于 2017-03-23T15:15:50.893 に答える
0

どちらの方法にも異なるセキュリティ リスクが存在します。Sql Server 認証を使用する場合は、ユーザー ID/パスワードをコードで公開します。ただし、少なくとも同じ資格情報で処理します。Windows 認証を使用する場合は、考えられるすべてのユーザーが Sql サーバーで適切な権限でセットアップされていることを確認する必要があります。Sql認証を使用すると、1人のユーザーのみをセットアップできますが、複数の人がその1つのSqlユーザー権限を賢明に使用できます.

于 2016-02-18T01:58:26.200 に答える
0
cnxn = pyodbc.connect(driver='{SQL Server}', host=server, database=db1,
                       user=uname, password=pword)

print(cnxn)

「Trusted_Connection」の部分を削除したところ、うまくいきました。

于 2022-02-02T12:27:10.560 に答える