web-dev-qa-db-ja.com

python pyodbc:特定のインスタンスに接続する方法

SQL Serverの特定のインスタンスに接続し、システムテーブルからデータを取得しようとしています。このコードスニペットを使用して接続しています:

connSqlServer = pyodbc.connect('DRIVER={SQL Server Native Client 10.0};SERVER=192.106.0.102;DATABASE=master;INSTANCE=instance1;UID=sql2008;PWD=password123;Trusted_Connection=yes')
...
cursorObj.execute("select * from sys.dm_os_sys_info")
row = cursorObj.fetchone()
print("rows from table ",row) 

ただし、デフォルトのインスタンスの値のみを取得していますが、「instance1」の値を取得できません。したがって、「INSTANCE = instance1」でインスタンス名を指定しても、実際には効果がないようです。それがなくても(インスタンスのポート番号「PORT = 1443」を与えようとしました)、デフォルトのSQL Serverインスタンスの値のみを取得しています。特定のインスタンスの値を取得するように強制する方法は?

12
Jean

認証

まず、uid/pwd(SQL Server認証)とtrusted_connection(Windows認証)の両方を提供します。 1つを選択してください。両方を使用することはできません。 次の例では、SQL Server認証を想定しています

接続文字列

インスタンス名を使用して名前付きインスタンスinstance1に接続する:

connSqlServer = pyodbc.connect('DRIVER={SQL Server Native Client 10.0};SERVER=192.106.0.102\instance1;DATABASE=master;UID=sql2008;PWD=password123')

ポート番号1443を使用したTCP/IPを使用した名前付きインスタンスへの接続:

connSqlServer = pyodbc.connect('DRIVER={SQL Server Native Client 10.0};SERVER=192.106.0.102,1443;DATABASE=master;UID=sql2008;PWD=password123')

キーワードの代替

pyodbc.connect() はキーワードをサポートします。これらは読みやすく、接続文字列属性に変数を使用している場合は文字列のフォーマットを行う必要がないと思います。

名前付きインスタンス:

connSqlServer = pyodbc.connect(driver='{SQL Server Native Client 10.0}',
                               server='192.106.0.102\instance1',
                               database='master',
                               uid='sql2008',pwd='password123')

TCP/IPポート:

connSqlServer = pyodbc.connect(driver='{SQL Server Native Client 10.0}',
                               server='192.106.0.102,1443',
                               database='master',
                               uid='sql2008',pwd='password123')
18
Bryan