sqldriverconnect specified source not name interfaceerror im002 found data and postgresql python-2.7 pyodbc unixodbc

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.