2013-03-25 19 views
19

ここに私の簡単なテストスクリプトがあります。基本的なselectステートメントを実行しようとしています。チュートリアルで基本的なビットを見つけました。SQLAlchemyがmssqlデータベースに接続できません

from sqlalchemy import * 

db = create_engine('mssql+pyodbc://user:[email protected]_address/database_name')  

db.echo = True 
metadata = MetaData(db) 

users = Table('member', metadata, autoload=True) 

def run(stmt): 
    rs = stmt.execute() 
    for row in rs: 
     print row 

s = users.select(users.c.fname == 'Bill') 
run(s) 

時間をかけて検索していくつかの解決策を試してみると、私が開始したときより解決に近づくことはありません。うまくいけば...

を私はどこかの単純なエラーを作ったが、私はそれを見つけることができないよここに私はすべてのヘルプははるかに高く評価されるだろう

sqlalchemy.exc.DBAPIError: (Error) ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)') None None 

を取得していますエラーがあります!

答えて

24

URLに指定されていない場合、mssql+pyodbcダイアレクトの既定のドライバは "SQL Server" [1]になります。それはあなたが/etc/unixODBC/odbcinst.iniで、このように読み込むセクションを持っている必要があります意味:

[SQL Server] 
Driver=/path/to/library.so 

これは、Windows上で「自動的に」働く、あなたは管理ツールを開いた場合ので - >データソース(ODBC)の場合は、Driversタブの下に「SQL Server」という名前のエントリがあります。

Linuxの場合、FreeTDSドライバまたはMicrosoftの公式ドライバを使用できます(私はこれをお勧めします)。

ドライバをインストールしたら、/etc/unixODBC/odbcinst.iniにこのような何かを持っている必要があります。

[FreeTDS] 
Driver=/usr/lib/libtdsodbc.so 
Threading=1 

[ODBC Driver 11 for SQL Server] 
Description=Microsoft ODBC Driver 11 for SQL Server 
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-11.0.so.2270.0 
Threading=1 
UsageCount=1 

を次に、あなただけの値で、URLにdriverクエリ文字列パラメータを追加する必要がありますセクション名に一致する。 FreeTDSので

サンプルURL:公式ドライバと

mssql+pyodbc://user:[email protected]_address/database_name?driver=FreeTDS 

サンプルURL:

mssql+pyodbc://user:[email protected]_address/database_name?driver=ODBC+Driver+11+for+SQL+Server 

[1] https://bitbucket.org/sqlalchemy/sqlalchemy/src/aa3a8f016f3e4396d125b18b0510abdf72aa8af2/lib/sqlalchemy/dialects/mssql/pyodbc.py?at=default#cl-236

+0

+1大きな説明。私はこれに遭遇するまで、非常に多くの異なることを試みました。私の問題は、その余分なパラメータなしでWindowsサーバー上で正常に動作しているので、接続文字列にドライバ名を追加してコードを変更できないということでした。そこで、私は '/ etc/odbcinst.ini'に' [SQL Server] 'という別のエントリを作成し、' [SQL Server Native Client 11.0] 'の下にあるすべてのものを自分のエントリにコピーしました!すべては動作します... –

+3

Windowsでも、SQLAlchemyはデフォルトのODBCドライバを見つけることができませんでした。 "?driver = SQL + Server"を追加すると、私の問題が解決しました。等号の名前は、管理ツール/データソース/ドライバの下にあるドライバ名と一致する必要があります。 – Matej

+0

最新のMSドライバ(v13)は、https://msdn.microsoft.com/en-us/で確認できます。ライブラリ/ hh568451%28v = sql.110%29.aspx ドライバマネージャをインストールし、すべての依存関係があることを確認して、ドライバをインストールします。 – iled

1

エラーは、IM002という名前のDSNセットアップがないことを示している可能性があります。あなたはそれが正しく設定されていることを確認するためにODBC接続を直接テストしようとしましたか?適切なMicrosoft SQL Serverデータベースドライバがインストールされていますか?

+0

どのように私は直接ODBC接続をテストするに行きますか?私はpyodbcだけのウィンドウの下でPythonスクリプトを使ってこれまでに接続しています。私はまた、mssqlのDBドライバは私のLinuxシステム上に存在すると信じていますが、間違いかもしれません。これはpyodbcとunixodbcですか? – Scott

+0

IM002は単なるエラーコードです。 DSNとは関係ありません。 – sayap

関連する問題