IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Python & Cx Oracle [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Octobre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Octobre 2016
    Messages : 15
    Par défaut Python & Cx Oracle
    Bonjour,

    Je cherche en ma connectant à un BDD Oracle à modifier les paramètres locaux comme les séparateurs décimaux, le format de date ...
    Voici un extrait de mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    version Cx_Oracle => cx-Oracle==6.0.3
     
    extrait du code
     
     
    import cx_Oracle
    import pandas as pd
     
     
    dsn_tns = cx_Oracle.makedsn(ip, port, SID)
    db = cx_Oracle.connect(login, password, dsn_tns, encoding='utf-8')
    cursor = db.cursor()
    cursor.execute("alter session set NLS_DATE_FORMAT='DD/MM/YYYY'")
    cursor.execute("alter session set NLS_NUMERIC_CHARACTERS=', '")
     
    df1 = pd.read_sql_query(sql, db)
    fic_sortie=rep_sortie+fic_sql+'_'+ddj+".txt"
    df1.to_csv(fic_sortie, sep="\t", encoding="cp1252", index=False)
    cursor.close()
    db.close()
    Le code s'exécute sans erreur mais le résultat issue de la requete SQL n'est pas celui attendu
    Le séparateur décimal est un point par exemple

    Une idée ?

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par Mickou35 Voir le message
    Une idée ?
    Il y a plein d'incohérences dans ce que vous faites.
    Déjà la documentation de pd.read_sql_query dit que la connexion doit être un SQLAlchemy ou un sqlite3 DBAPI2 connexion. Admettons que çà fonctionne...

    Après une chose comme "alter session set NLS_DATE_FORMAT='DD/MM/YYYY'" dit attention les chaînes de caractères au format DATE sont de la forme 'DD/MM/YYYY' merci de ne pas faire n'importe quoi lorsque...
    Mais l'intérêt de la DBAPI est de permettre au pilote de traduire le type côté base de donnée en type Python équivalent.
    Donc les nombres décimaux et les dates contenues dans le dataframe construit par la requête devraient être dans le type Python "natif" correspondant (et non de simples strings).
    Ce qu'il vous appartient de vérifier...
    Et si c'est le cas, c'est côté df1.to_csv qu'il y a un soucis.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Octobre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Octobre 2016
    Messages : 15
    Par défaut
    Merci wiztricks :-)

    en parcourant à nouveau la documentation Pandas
    "https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_csv.html

    il y a bien un paramètre qui m'a échappé

    decimal : str, default ‘.’
    Character recognized as decimal separator. E.g. use ‘,’ for European data

    d'ou le constat de non action du alter session set NLS_NUMERIC_CHARACTERS=', '

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Se Connecter Python avec Oracle
    Par Dayssam dans le forum Bibliothèques tierces
    Réponses: 1
    Dernier message: 09/05/2008, 22h31
  2. Python, Qt et Oracle
    Par Benedict dans le forum PyQt
    Réponses: 1
    Dernier message: 12/10/2007, 18h36
  3. Python Oracle et SF
    Par JohnBlatt dans le forum Bibliothèques tierces
    Réponses: 1
    Dernier message: 17/10/2006, 15h10
  4. cmt se connecté a oracle pour faire une requete avec python
    Par dipajero dans le forum Bibliothèques tierces
    Réponses: 6
    Dernier message: 28/12/2005, 20h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo