postgresql - specified - pyodbc interfaceerror('' im002 ''[ im002
Pyodbc-"Nombre de fuente de datos no encontrado, y no se especificó ningún controlador predeterminado" (5)
Creo que la respuesta a su problema es que en su archivo ~ / .odbc.ini está diciendo que usa el controlador PostgreSQL
, pero no ha definido ese controlador en su archivo /etc/odbcinst.ini. Intente cambiar PostgreSQL
a PostgreSQL ANSI
o PostgreSQL Unicode
(ambos se definen en /etc/odbcinst.ini).
Tengo problemas para lograr que pyodbc
funcione. Tengo los unixodbc
, unixodbc-dev
, odbc-postgresql
, pyodbc
instalados en mi Linux Mint 14. Estoy perdiendo la esperanza de encontrar una solución por mi cuenta, cualquier ayuda apreciada. Vea los detalles abajo:
Corriendo:
>>> import pyodbc
>>> conn = pyodbc.connect("DRIVER={PostgreSQL};SERVER=localhost;DATABASE=test;USER=openerp;OPTION=3;")
Me da:
>>> pyodbc.Error: (''IM002'', ''[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)'')
# odbcinst -j da :
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
Lo que me hace pensar que hay un problema de configuración unixodbc
. Aquí están mis contenidos del archivo de configuración de unixodbc
:
Archivo /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
Archivo /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 =
Archivo ~/.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 =
Para mí, el problema era la ubicación real de mis archivos odbc.ini y odbcinst.ini.
En muchos sistemas, la ubicación de instalación de estos archivos está en / etc /
Sin embargo, en mi caso, estos archivos se ubicaron en / usr / local / etc /
El podría ser determinado escribiendo
odbcinst -j
Que cedió:
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
Mis archivos odbc.ini ya existen en / etc, así que la solución fue copiarlos de / etc / a / usr / local / etc /
cp /etc/odbc.ini /etc/odbcinst.ini /usr/local/etc/
Editar: también vale la pena señalar que la ruta generada por el comando odbcinst -j puede cambiar dependiendo de si se usa sudo
o no.
Para mí, todo se redujo a un solo personaje de espacio en blanco.
$cat /home/ec2-user/.odbc.ini
[DSNNAME]
Driver =FreeTDS
Description=description
Server =serverpath
Port =1433
Database =dbname
Me dio el error "Nombre de fuente de datos no encontrado, y no se especificó ningún controlador predeterminado".
Eliminar todos los espacios en blanco antes de que el carácter ''='' lo hiciera funcionar.
En una nota secundaria, el uso de osql para las pruebas de conexión de DSN brinda una descripción mucho más detallada de cualquier error. Me ayudó mucho en el proceso.
$ 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
Comparar el mensaje de error con mi archivo ini hizo que el problema fuera mucho más fácil.
Para otros que solucionen este mismo error genérico, asegúrese de no haber agregado accidentalmente caracteres extraños en la parte superior del archivo odbc.ini, lo que hace que no sea válido y que todas las declaraciones de fuente de datos se ignoren silenciosamente (el error no indica nada del problema específico).
Tengo el mismo problema. Resulta que el archivo fuente de datos omitió: /etc/ODBCDataSources
. Solo toca ese archivo y funciona.