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 :

Modification d'une BD MySql distante à partir de libreOffice Calc


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Par défaut Modification d'une BD MySql distante à partir de libreOffice Calc
    Bonjour
    Je souhaite mettre à jour une base de données distante stockée sur une Raspberry avec des valeurs que je calcule dans calc.

    Pour le moment, les accès à ma base de données sont ouverts. J'y accède avec Libreoffice base à l'aide du connecteur JDBC.

    J'ai installé l'extension APSO pour exécuter les scripts python dans libre office. J'ai testé un petit script. Tout fonctionne

    Maintenant, je dois coder mon script qui me permet d'accéder à ma base de données et la modifier.
    Là mes compétences font défauts.

    J'ai installer la bibliothèque pyodbc. Elle ne semble pas avoir de driver.

    ce petit script que j'ai trouvé dans cette vidéo :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import pyodbc
     
    for driver in pyodbc.drivers():
        print(driver)
    N'affiche rien.
    J'ai l'impression de ne pas avoir de driver ! Je cherche, mais je ne trouve pas d'infos. Je cherche peut être mal.
    J'ai mysql.connector-j et python3-mysql.connector d'installé.

    Je ne suis pas du tout un spécialiste en programmation. Il me reste quelques anciennes notions. Je me lance dans un gros défi.


    Linux mint 20.3
    Python 3.8.10
    LibreOffice 6.4

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 510
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 510
    Par défaut
    sinon LibreOffice Base n'est pas LibreOffice Calc.
    Il faut installer le connecteur mysql https://www.mysql.com/fr/products/connector/ (ta vidéo montre qu'il faut charger le connecteur SQL Server, vu que c'est l'objet du tuto et comme toi tu utilises MySQL, il faut alors le connecteur MySQL)
    Dans la doc de pyodbc => https://github.com/mkleehammer/pyodb...cting-to-MySQL

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Par défaut
    Citation Envoyé par umfred Voir le message
    sinon LibreOffice Base n'est pas LibreOffice Calc.
    Merci. J'ai juste utilisé Base pour vérifier que j'accède bien à ma base distante. Maintenant, c'est avec calc que je souhaite la modifier.

    Citation Envoyé par umfred Voir le message
    Il faut installer le connecteur mysql https://www.mysql.com/fr/products/connector/ (ta vidéo montre qu'il faut charger le connecteur SQL Server, vu que c'est l'objet du tuto et comme toi tu utilises MySQL, il faut alors le connecteur MySQL)
    Dans la doc de pyodbc => https://github.com/mkleehammer/pyodb...cting-to-MySQL
    Merci, je suis dessus depuis un moment. Ceux que j'ai installé ne doivent pas convenir. J'essaie d'installer le connecteur mais j'ai une erreur de dépendance avec mysql-community-client-plugins.
    Je cherche comment résoudre ce problème

    C'est bon, ce problème est résolu. J'ai trouvé mysql-community-client-plugin sur le même site que le connecteur ODBC

    Désormais, mon petit script du dessus m'affiche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MySQL ODBC 8.0 Unicode Driver
    MySQL ODBC 8.0 ANSI Driver
    Je pars avec Unicode dans mon cas vu qu'il n'y a rien de windows dans toute mon installation.

    J'aurai aimer tester avec une base de test local, mais bon , je n'ai pas les drivers. je vais essayer de ne pas tout casser avec mon code

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 510
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 510
    Par défaut
    attention à la remarque faite sur le github à propos de la version du driver et de mySQL https://github.com/mkleehammer/pyodb.../Unicode#mysql

    Si tu ne fais que du select dans un 1er temps, tu ne casseras rien :p

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Par défaut
    Citation Envoyé par umfred Voir le message
    attention à la remarque faite sur le github à propos de la version du driver et de mySQL https://github.com/mkleehammer/pyodb.../Unicode#mysql
    En effet, il semble plus prudent de prendre le ANSI. Pour le moment, j'ai utlisé Unicode avec charset=utf8mb4 . Y a t'il un moyen de savoir quel codage est utilisé dans ma base ?

    Citation Envoyé par umfred Voir le message
    Si tu ne fais que du select dans un 1er temps, tu ne casseras rien :p
    Trop tard, je n'ai pas résisté à l'envie de faire un UPDATE

    Tout fonctionne parfaitement
    Voici mon premier bout de code pour tester. Ce n'est pas terminer mais les premières briques sont là
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    # coding: utf-8
    from __future__ import unicode_literals
     
    #1- Connection à la base dolibarr  distante sur la raspberry
    import pyodbc
     
    #affichage des différents drivers installés
    for driver in pyodbc.drivers():
        print(driver)
     
    connexion = pyodbc.connect("DRIVER=MySQL ODBC 8.0 Unicode Driver; \
                            SERVER=192.168.0.24; \
                            PORT=3306;\
                            DATABASE=dolibarr;\
                            UID=xxxx;\
                            PWD=xxxx;\
                            charset=utf8mb4")
    cursor = connexion.cursor()
     
    #2- Tester la récupération du prix (price) d'une reférence  (ref) dans la table llx_product
    requete = "SELECT price FROM llx_product WHERE ref = '100_CONSUEL_NEUF'"
     
    cursor.execute(requete)
     
    #Affiche le résultat dans la console
    resultat = cursor.fetchone()[0]
    print("La valeur récupérée avant modification est :", resultat)
     
    #3- Mettre cette valeur dans une cellule du tableau (J10) de la feuille ouverte
    desktop = XSCRIPTCONTEXT.getDesktop()
    model = desktop.getCurrentComponent()
    sheet = model.CurrentController.ActiveSheet
    cell= sheet.getCellRangeByName("J10")
    cell.setValue(resultat)
     
    # 4- Mise à jour du prix et du prix TTC dans la table llx_product de la référence 
    requete = "UPDATE llx_product SET price = 113.11 WHERE ref = '100_CONSUEL_NEUF'"
    cursor.execute(requete)
    requete = "UPDATE llx_product SET price_ttc = 113.11 WHERE ref = '100_CONSUEL_NEUF'"
    cursor.execute(requete)
     
    # 5- Vérification que les valeurs sont bien passées. Affichage uniquement dans la console
    requete = "SELECT price FROM llx_product WHERE ref = '100_CONSUEL_NEUF'"
    cursor.execute(requete)
     
    resultat = cursor.fetchone()[0]
    print("La valeur récupérée après modification est :", resultat)
     
    # 6- Validation des modifications. A faire obligatoirement sinon, la base n'est pas modifiée durablement.
    connexion.commit()
     
    #Fermer la connexion
    cursor.close()
    conn.close()
     
    # Pour debuguer dans calc
    from apso_utils import msgbox
    msgbox('terminé')

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 510
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 510
    Par défaut
    regarde les requêtes paramétrées ensuite.

  7. #7
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Par défaut
    Citation Envoyé par umfred Voir le message
    regarde les requêtes paramétrées ensuite.
    Merci umfred pour ce guidage.
    J'aurai du regarder ton message avant. J'ai fait ce qu'il ne faut pas faire en concaténant les éléments de ma requête.
    Ca fonctionne bien ainsi et n'étant pas informaticien, je pense que je vais m’arrêter là. Et tant pis pour la sécurité. Les accès à ma base sont déjà bien paramétrés. Enfin, je crois
    Je mettrais mon code quand il sera propre en dessous. J'espère aujourd'hui. Il me reste à insérer les nouvelles lignes dans la base.

    Merci encore pour l'aide que j'ai reçu.

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/07/2011, 14h03
  2. [MySQL] modification d'une table mysql a partir d'un formulaire
    Par belakhdarbts10 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/07/2011, 08h13
  3. Connexion sur une base Mysql distante (non locale)
    Par externa dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 20/02/2006, 11h34
  4. [Windows] Pouvoir se connecter a une base mysql distante
    Par TEALC dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 08/12/2005, 17h12
  5. connection a une bes mysql distante
    Par rollernox dans le forum Bases de données
    Réponses: 5
    Dernier message: 21/07/2004, 11h22

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