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 =
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).
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.
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.
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).
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.