web-dev-qa-db-ja.com

sqlalchemyとpyodbcを使用してSQL Server 2012に接続する

Python 3.3(Windows 7-64-bit)でSQLAlchemy(pyodbcを使用)を使用してSQL Server 2012データベースに接続しようとしています。ストレートpyodbcを使用して接続できますが、 SQLAlchemyを使用した接続に失敗しました。データベースアクセス用のdsnファイルをセットアップしています。

次のように、まっすぐなpyodbcを使用して正常に接続します。

_con = pyodbc.connect('FILEDSN=c:\\users\\me\\mydbserver.dsn')
_

Sqlalchemyについては、私が試しました:

_import sqlalchemy as sa
engine = sa.create_engine('mssql+pyodbc://c/users/me/mydbserver.dsn/mydbname')
_

_create_engine_メソッドは実際に接続をセットアップせずに成功しますが、iを使用してsqlalchemyが実際に接続をセットアップするようなもの(engine.table_names()など)を試みると、しばらくかかりますが、これを返しますエラー:

DBAPIError: (Error) ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect)') None None

どの接続文字列がsqlalchemyによってpyodbcに実際に渡されているかをどのように確認するかが問題であるかどうかはわかりません。 SQLiteとMySQLで同じsqlalchemyクラスを正常に使用しました。

前もって感謝します!

20
Brad Campbell

ファイルベースのDSN文字列は、SQLAlchemyによってサーバー名= c、データベース名= usersとして解釈されています。

DSNを使用せずに接続することを好みます。これは、コードの移行中に処理する構成タスクが1つ少ないことです。

この構文は、Windows認証を使用して機能します。

engine = sa.create_engine('mssql+pyodbc://server/database')

または、SQL認証の場合:

engine = sa.create_engine('mssql+pyodbc://user:password@server/database')

SQLAlchemyには、さまざまな接続文字列オプション here の詳細な説明があります。

32
Bryan

DSNとWindows認証を使用せずにMSSQL Serverへの接続に関する更新情報があります。この例では、次のオプションがあります。ローカルサーバー名は「(localdb)\ ProjectsV12」です。データベースプロパティから表示されるローカルサーバー名(Windows 10/Visual Studio 2015を使用しています)。私のデータベース名は「MainTest1」です

engine = create_engine('mssql+pyodbc://(localdb)\ProjectsV12/MainTest1?driver=SQL+Server+Native+Client+11.0', echo=True)

接続中のドライバーを指定する必要があります。クライアントバージョンは次の場所にあります。

コントロールパネル>システムとセキュリティ>管理ツール> ODBCデータソース>システムDSNタブ>追加

リストからSQL Native Clientのバージョンを確認してください。

18
Andrew

Python 3では、モジュールquote_plusの関数 urllib.parse を使用してパラメーターを作成できます]接続:

import urllib
params = urllib.parse.quote_plus("DRIVER={SQL Server Native Client 11.0};"
                                 "SERVER=dagger;"
                                 "DATABASE=test;"
                                 "UID=user;"
                                 "PWD=password")

engine = sa.create_engine("mssql+pyodbc:///?odbc_connect={}".format(params))

Windows認証を使用するには、使用したい Trusted_Connection パラメーターとして:

params = urllib.parse.quote_plus("DRIVER={SQL Server Native Client 11.0};"
                                 "SERVER=dagger;"
                                 "DATABASE=test;"
                                 "Trusted_Connection=yes")

Python 2では、ライブラリurllibの関数 quote_plus を代わりに使用する必要があります。

params = urllib.quote_plus("DRIVER={SQL Server Native Client 11.0};"
                           "SERVER=dagger;"
                           "DATABASE=test;"
                           "UID=user;"
                           "PWD=password")
13
pooja karande

ここに最新情報を追加したいだけです。DSN接続を使用して接続している場合:

engine = create_engine("mssql+pyodbc://USERNAME:PASSWORD@SOME_DSN")

ホスト名接続を使用して接続している場合:

engine = create_engine("mssql+pyodbc://USERNAME:PASSWORD@Host_IP:PORT/DATABASENAME?driver=SQL+Server+Native+Client+11.0")

詳細については、 "Official Document" を参照してください。

1
ssword