2013-04-01 31 views
8

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

私は正常にこのようにストレートpyodbcを使用して接続:私は試してみましたSQLAlchemyのために

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

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

create_engine方法は、実際に接続を設定し、成功しますが、 IIFはありません私は実際に(engine.table_names()のような)接続をセットアップするためにsqlalchemyを実行する何かを試して、しばらく時間がかかるが、このエラーを返します:

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

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

ありがとうございます!

答えて

21

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

DSNを使用しないで接続することをお勧めしますが、コードの移行中に対処する構成タスクが少なくて済みます。

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

またはSQL認証を使用した:

この構文は、Windows認証を使用して動作します

engine = sa.create_engine('mssql+pyodbc://user:[email protected]/database') 

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

+2

ありがとうございました。 SQL Serverのインスタンスは、私が作業しているマシン上にない唯一のインスタンスなので、ここで面白いことが起こっているかどうかはわかりませんでした。あなたがリストに載っていることをちょっと拡張するだけです(SQL Serverインスタンスの名前は明白です) - sa.create_engine( 'mssql + pyodbc:// [machinename] \\ [servername]/[database]') ' –

+1

名前を付ける必要はありません。実際には、「デフォルト・インスタンス」として構成されたSQL Serverインスタンスに接続して使用する方が簡単です。 1つのサーバーで複数のSQL Serverインスタンスをホストする場合は、名前付きインスタンスが必要です。 – marr75

6

DSNとWindows認証を使用せずにMSSQL Serverへの接続に関するアップデート情報があります。私の例では次のオプションがあります: 私のローカルサーバー名は "(localdb)\ ProjectsV12"です。ローカルサーバー名データベースのプロパティから表示されます(Windows 10/Visual Studio 2015を使用しています)。 私のDB名は、関連してドライバを指定するために必要とされる「MainTest1」

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

です。リストからSQLネイティブクライアントのバージョンに

control panel>Systems and Security>Administrative Tools.>ODBC Data Sources>System DSN tab>Add

ルック: あなたには、あなたのクライアントのバージョンを見つけることができます。

+0

これは私のために働いた唯一のものです。どうもありがとう! – Barka

関連する問題