web-dev-qa-db-ja.com

Pyodbc-「データソース名が見つからず、デフォルトのドライバーが指定されていません」

pyodbcの作業に問題があります。 unixodbcunixodbc-devodbc-postgresqlpyodbcパッケージがLinux Mint 14にインストールされています。自分で解決策を見つける希望を失いつつあります。以下の詳細を参照してください。

実行中:

>>> import pyodbc
>>> conn = pyodbc.connect("DRIVER={PostgreSQL};SERVER=localhost;DATABASE=test;USER=openerp;OPTION=3;")

提供:

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

#odbcinst -jが与える

unixODBC 2.2.14
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/atman/.odbc.ini
SQLULEN Size.......: 4
SQLLEN Size........: 4
SQLSETPOSIROW Size.: 2

unixodbc構成に問題があると思います。 unixodbc構成ファイルの内容は次のとおりです。

ファイル/etc/odbcinst.ini

[PostgreSQL ANSI]
Description     = PostgreSQL ODBC driver (ANSI version)
Driver      = psqlodbca.so
Setup       = libodbcpsqlS.so
Debug       = 0
CommLog     = 1
UsageCount      = 2

[PostgreSQL Unicode]
Description     = PostgreSQL ODBC driver (Unicode version)
Driver      = psqlodbcw.so
Setup       = libodbcpsqlS.so
Debug       = 0
CommLog     = 1
UsageCount      = 2

ファイル/etc/odbc.ini

[PostgreSQL test]
Description         = PostgreSQL 
Driver              = PostgreSQL ANSI
Trace               = No
TraceFile           = /tmp/psqlodbc.log
Database            = template1
Servername          = localhost
UserName            =
Password            =
Port                =
ReadOnly            = Yes
RowVersioning       = No
ShowSystemTables    = No
ShowOidColumn       = No
FakeOidIndex        = No
ConnSettings        =

ファイル~/.odbc.ini

[DEFAULT]
Driver = PostgreSQL

[PostgreSQL]
Description         = Test to Postgres
Driver              = PostgreSQL
Trace               = Yes
TraceFile           = sql.log
Database            = nick
Servername          = localhost
UserName            =
Password            =
Port                = 5432
Protocol            = 6.4
ReadOnly            = No
RowVersioning       = No
ShowSystemTables    = No
ShowOidColumn       = No
FakeOidIndex        = No
ConnSettings        =
41
atman

あなたの問題に対する答えは、〜/ .odbc.iniファイルでPostgreSQLドライバーを使用するように言っているということですが、/ etc/odbcinst.iniファイルでそのドライバーを定義していないと思います。 PostgreSQLPostgreSQL ANSIまたはPostgreSQL Unicode(両方とも/etc/odbcinst.iniで定義されている)に変更してみてください。

24
Benny Hill

私にとって、問題は私のodbc.iniおよびodbcinst.iniファイルの実際の場所でした。

多くのシステムでは、これらのファイルのインストール場所は/ etc /にあります

ただし、私の場合、これらのファイルは/ usr/local/etc /の下にありました

次のように入力して決定できます
odbcinst -j

結果は次のとおりです。

unixODBC 2.3.0
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /usr/local/etc/odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

私のodbc.iniファイルは既に/ etcに存在しているので、解決策は/ etc /から/ usr/local/etc /にコピーすることでした

cp /etc/odbc.ini /etc/odbcinst.ini /usr/local/etc/

編集:odbcinst -jコマンドによって出力されるパスは、Sudoを使用するかどうかに応じて変更できることに注意してください。

15
tandy

私にとって、それはすべて単一の空白文字にかかっていました。

$cat /home/ec2-user/.odbc.ini
[DSNNAME]
Driver =FreeTDS
Description=description
Server =serverpath
Port =1433
Database =dbname

「データソース名が見つかりません。デフォルトのドライバーが指定されていません」というエラーが表示されます。

「=」文字の前のすべての空白を削除すると機能しました。

副次的に、DSN接続テストにosqlを使用すると、エラーのより詳細な説明が得られます。その過程で私は大いに役立ちました。

$ osql -S DSNNAME -U username -P password
checking shared odbc libraries linked to isql for default directories...
    trying /txM ... no
    trying /tmp/sql ... no
    trying /tmp/sql ... no
    trying /w}H ... no
    trying /usr/loc ... no
    trying /tmp/sql.log ... no
    trying /home ... no
    trying /.odbc.ini ... no
    trying /usr/local/etc ... OK
checking odbc.ini files
    reading /home/ec2-user/.odbc.ini
[DSNNAME] found in /home/ec2-user/.odbc.ini
found this section:
    [DSNNAME]
    Driver =FreeTDS
    Description=description
    Server =serverpath
    Port =1433
    Database =dbname

looking for driver for DSN [DSNNAME] in /home/ec2-user/.odbc.ini
  no driver mentioned for [DSNNAME] in .odbc.ini
looking for driver for DSN [default] in /home/ec2-user/.odbc.ini
osql: error: no driver found for [DSNNAME] in .odbc.ini

エラーメッセージをiniファイルと比較すると、問題のトリアージングがずっと簡単になりました。

4
Andy G

この同じ一般的なエラーのトラブルシューティングを行う他の人のために、誤ってodbc.iniファイルの先頭に無関係な文字を追加していないことを確認してください。これにより、無効になり、すべてのデータソース宣言がsilently無視されます(特定の問題の兆候を与えないエラー)。

1
DavidJ

私は同じ問題を抱えています。データソースファイルが欠落していることがわかりました:/etc/ODBCDataSources。そのファイルをタッチするだけで動作します。

1
yzark