Forum Programmation.python ODBC avec pyodbc

Posté par  . Licence CC By‑SA.
Étiquettes :
0
17
août
2018

Bonjour,
Débutant sur python depuis 48 heures, je bute sur un problème et je n'ai trouvé nul part comment le résoudre.

Ma configuration
Ubuntu 18.04 - Python 2.7

Le but final est de se connecter avec ODBC à un serveur HyperFile-SQL installée sur le serveur Ubuntu.

Pour cela j'ai :

  • Installé et testé le serveur HFSQL en créant une base test_db avec une table pays.

  • sudo apt install libodbc1 libiodbc2-dev iodbc pip

  • pip install pyodbc

  • Installé le driver HFSQL avec le script fourni*: sudo ./install.sh

  • Créé par le script : /etc/odbcinst.ini
    [ODBC Drivers]
    HFSQL = Installed

[HFSQL]
Description = HFSQL ODBC Driver
Driver = /home/phil/odbc/wd200hfo64.so

  • Créé : /etc/odbc.ini

[ODBC Data Sources]
testdb = HFSQL

[testdb]
Driver = /home/phil/odbc/wd200hfo64.so
Server Name = 127.0.0.1
Server Port = 4900
Database = test_db
UID = admin

  • Testé > iodbctest "DRIVER={HFSQL};Server Name=127.0.0.1;Server Port=4900;Database=test_db;UID=admin;PWD=a99"
    connexion et requête select/insert sur la table pays : ok

  • Testé > iodbctest "DSN=testdb;UID=admin;PWD=a99"
    connexion et requête select/insert sur la table pays : ok

Là ou cela coince c'est dans mon code de test : t01.py

import pyodbc

cs = "DRIVER={HFSQL};Server Name=127.0.0.1;Server Port=4900;Database=test_db;UID=admin;PWD=a99"
db = pyodbc.connect(cs)
print "Connexion ok"
db.close()

qui me renvoie le message suivant :
Traceback (most recent call last):
File "t01.py", line 4, in
db = pyodbc.connect(cs)
pyodbc.Error: ('0000', u'[0000] [unixODBC]I (0) (SQLDriverConnect)')

Erreur identique si je met : cs = "DSN=testdb;UID=admin;PWD=a99"

J'ai regardé la configuration odbc avec la commande odbcinst -j et j'obtient
unixODBC 2.3.4
DRIVERS…………: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/phil/.odbc.ini
SQLULEN Size…….: 8
SQLLEN Size……..: 8
SQLSETPOSIROW Size.: 8

Voyant sur la première ligne, ainsi que dans le message d'erreur : "unixODBC", j'ai supposé que Python n'utilise pas iodbc mais unixODBC, alors j'ai exécuté sudo apt install unixodbc.
Aucun changement !

Une idée pour que j'avance un peu

  • # pypyodbc

    Posté par  . Évalué à 2.

    je ne connais pas hyperfile-sql mais j'ai un bon google-fu.

    Par , quelqu'un conseille d'utiliser pypyodbc (ré-implémentation en python pur de pyodbc). Ça se tente

    • [^] # Re: pypyodbc

      Posté par  . Évalué à 1. Dernière modification le 18 août 2018 à 14:11.

      Bonjour
      Merci pour avoir pris du temps pour essayer de m'aider mais j'avais déjà lu ce post (j'ai le même google-fu…)
      Le problème semble venir de pyodbc.so qui est surement compilé avec la librairie unixodbc. Hors le driver HyperFile Client Serveur ne semble fonctionner qu'avec iodbbc. J'ai donc télécharger de l'adresse : https://github.com/mkleehammer/pyodbc les sources de pyodbc puis modifié le setup.py pour qu'il utilise iodbc au lieux d'unixodbc. A la première compil j'ai eu une erreur que j'ai réussi à by-passer. La seconde compilation est passée mais j'ai une erreur d’exécution.

      ps C'est le même soucis au niveau du .connect() avec pypyodbc (j'avais déjà tenté le coup)

      • [^] # Re: pypyodbc

        Posté par  . Évalué à 2.

        c'est une des limites du logiciel propriétaire. Sans avoir accès aux binaires ou au code source, ça limite la connaissance de la communauté. J'ai répondu histoire de ne pas donner l'impression que tout le monde s'en fout. Et puis pypyodbc, ça aurait pu fonctionner. C'est peut-être un problème tout bête, mais j'ai peur que les gens spécifiquement compétents sur hyperfile-sql et python ne soient pas très nombreux.

        Il faut se retourner vers l'éditeur pc soft, en espérant qu'il fournisse une assistance digne de ce nom. (Ou se débarrasser de windev et s'orienter vers un environnement plus ouvert si c'est possible).

        Si Windev ne peut pas être remplacé, c'est quand même peut-être possible de contourner le problème en s'appuyant sur un autre SGBD. Quelqu'un dit là (stackoverflow, 3ème réponse) que windev fonctionne bien avec postgreSQL. Un autre avantage (si HSQL n'est pas trop intégré dans ton projet), c'est que partir sur une solution postreSQL permettrait plus facilement de dégager windev, à terme.

        • [^] # Re: pypyodbc

          Posté par  . Évalué à 1.

          Le but "final" de l’exercice est de concevoir un wrapper multicorn afin de faciliter la migration de fichier HFSQL vers postgreSQL.

          Personnellement je n'utilise jamais HFSQL…

          Quant a avoir des infos de la part de l'éditeur, il ne faut pas y compter.

          Cet exercice me permet d'en apprendre un peut sur python, les wrapper et la compilation sur linux

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.