31

これが私の簡単なテストスクリプトです。基本的なselectステートメントを実行しようとしています。チュートリアルで基本的な部分を見つけました。

from sqlalchemy import *

db = create_engine('mssql+pyodbc://user:pass@ip_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)

1時間探し回っていくつかの解決策を試した後、私は始めたときよりも解決に近づいていません。うまくいけば、どこかで単純なエラーを犯しただけですが、それを見つけることができません...

これが私が得ているエラーです

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

どんな助けでも大歓迎です!

4

2 に答える 2

34

URLで指定されていない場合、方言のデフォルトのドライバーはmssql+pyodbc「SQLServer」[1]になります。つまり、/ etc / unixODBC/odbcinst.iniに次のようなセクションが必要です。

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

Windowsでは「自動的に」機能します。 [管理者ツール] ->[データソース(ODBC) ]を開くと、[ドライバー]タブに[SQLServer]という名前のエントリが表示される可能性が高いためです。

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

driver次に、セクション名と一致する値を使用して、クエリ文字列パラメータをURLに追加する必要があります。

FreeTDSのサンプルURL:

mssql+pyodbc://user:pass@ip_address/database_name?driver=FreeTDS

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

mssql+pyodbc://user:pass@ip_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

于 2013-03-25T23:58:17.997 に答える
1

表示されるエラーは、IM002という名前のDSNセットアップがないことを示している可能性があります。ODBC接続を直接テストして、正しくセットアップされていることを検証しましたか?適切なMicrosoftSQLServerデータベースドライバーがインストールされていますか?

于 2013-03-25T23:12:00.537 に答える