Pyodbc - "имя источника данных не найден и не указан драйвер по умолчанию"
у меня проблемы с получением pyodbc
работа. У меня unixodbc
, unixodbc-dev
, odbc-postgresql
, pyodbc
пакеты, установленные на моем 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 =
5 ответов
Я считаю, что ответ на вашу проблему заключается в том, что в вашем~/.интерфейс ODBC.ini-файл, который вы говорите использовать driver PostgreSQL
- но вы не определили этот драйвер в своем /etc/odbcinst.ini-файл. Попробуйте изменить PostgreSQL
до PostgreSQL ANSI
или PostgreSQL Unicode
(оба из которых определены в /etc/odbcinst.ini).
для меня проблема заключалась в фактическом местоположении моего 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/
Edit: также стоит отметить, что путь, выводимый командой odbcinst-j, может меняться в зависимости от использования sudo
или нет.
для меня все сводилось к одному символу пробела.
$cat /home/ec2-user/.odbc.ini
[DSNNAME]
Driver =FreeTDS
Description=description
Server =serverpath
Port =1433
Database =dbname
дал мне "имя источника данных не найден и не указан драйвер по умолчанию" ошибка.
удаление всех пробелов перед символом ' = ' заставило его работать.
во вторичном примечании использование osql для тестирования соединений DSN дает вам гораздо более подробное описание любых ошибок. Это очень помогло мне в процессе.
$ 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-файл сделал сортировку проблемы намного проще.
для других устранения этой же общей ошибки убедитесь, что вы случайно не добавили посторонние символы в верхней части odbc.ini-файл-что делает его недействительным, а все объявления источника данных -молча игнорируется (ошибка, не указывающая на конкретную проблему).
У меня такая же проблема. Оказывается, файл источника данных пропустил: /etc/ODBCDataSources
. Просто прикоснитесь к этому файлу, и он заработает.