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クラスを正常に使用しました。
前もって感謝します!
ファイルベースの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 の詳細な説明があります。
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のバージョンを確認してください。
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")
ここに最新情報を追加したいだけです。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" を参照してください。