Pyodbc - " le nom de la source de données n'est pas trouvé, et aucun pilote par défaut n'est spécifié"

j'ai du mal à obtenir pyodbc travail. J'ai unixodbc , unixodbc-dev , odbc-postgresql , pyodbc paquets installés sur mon Linux Mint 14. Je perds espoir de trouver une solution toute seule, toute aide appréciée. Voir les détails ci-dessous:

en cours d'Exécution:

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

me Donne:

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

# odbcinst-j gives :

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

ce qui me fait penser qu'il y a un problème de configuration unixodbc . Voici mon contenu de fichier de configuration unixodbc :

Fichier /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

Fichier /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        =

Fichier ~/.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        =
34
demandé sur Suit Boy Apps 2013-04-29 17:47:13

5 réponses

je crois que la réponse à votre problème est que dans votre ~/.ODBC.fichier ini vous dire d'utiliser le pilote PostgreSQL - mais vous n'avez pas défini ce pilote dans votre /etc/odbcinst.fichier ini. Essayez de changer PostgreSQL en PostgreSQL ANSI ou PostgreSQL Unicode (tous deux définis dans /etc/odbcinst.ini).

22
répondu Benny Hill 2013-04-29 14:16:02

pour moi, le problème était l'emplacement réel de mon odbc.ini et odbcinst.les fichiers ini.

Sur de nombreux systèmes, l'emplacement d'installation de ces fichiers est dans /etc/

cependant, dans mon cas, ces fichiers ont été localisés sous /usr / local / etc /

le peut être déterminé en tapant

odbcinst -j

qui donne:

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

mon odbc.les fichiers ini déjà existe dans / etc, donc la solution a été de les copier De /etc / à/usr/local/ etc /

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

éditer: il est également intéressant de noter que le chemin produit par la commande odbcinst-j peut changer en fonction de l'utilisation de sudo ou non.

11
répondu tandy 2016-06-23 17:17:41

pour moi, tout était dû à un seul caractère d'espace.

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

m'a donné le" nom de la source de données non trouvé, et aucun pilote par défaut spécifié " erreur.

suppression de tous les espaces blancs avant que le caractère '=' ne le fasse fonctionner.

sur une note secondaire, l'utilisation d'osql pour le test de connexion DSN vous donne une description beaucoup plus verbeuse de toutes les erreurs. Il m'a beaucoup aidé dans le processus.

$ 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

comparer le message d'erreur avec mon fichier ini a rendu le tri de la question beaucoup plus facile.

4
répondu Andy G 2015-11-15 18:27:42

pour les autres dépannage de cette même erreur générique, assurez-vous que vous n'avez pas accidentellement ajouté des caractères étrangers au haut de votre odbc.fichier ini-ce qui la rend invalide et toutes les déclarations source de données d'être silencieusement ignoré (l'erreur ne donnant aucune indication du problème spécifique).

1
répondu DavidJ 2016-09-22 18:19:23

j'ai le même problème. Il s'avère que le fichier source de données a manqué: /etc/ODBCDataSources . Il suffit de toucher ce dossier et il fonctionne.

1
répondu yzark 2017-12-12 09:49:16