Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec "CREATE DATABASE IF NOT EXISTS"

    20 novembre 2019 à 13:34:25

    Bonjour, Bonsoir

    J'essaye de crée une fonction en Python qui a pour but de contrôler l'id client rentrer avec une base de données, si le contrôle est OK, la fonction doit ensuite vérifier si il existe déjà une base de données qui a pour nom l'id client saisie, si elle n'existe pas la fonction doit crée la base de données.

    Quand je lance mon programme, l'erreur (1064 "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near") se présente.

    J'utilise 'CREATE DATABASE (%s) IF NOT EXISTS (%s)' comme ceci :

    def verify():
        con = MySQLdb.connect(user='xxxxxxxxxxxxxxxxxxxx',
                          host='xxxxxxxxxxxxxxxxxxxxxxxx',
                          password='xxxxxxxxxxxxxxxxxxx',
                          database='xxxxxxxxxxxxx')
    
        cursor = con.cursor()
        cursor.execute('SELECT idClient FROM Client WHERE idClient LIKE \'%' + str(logentry.get()) + '%\'')
        result = cursor.fetchone()
    
        if result is not None:
            print "Ok"
            dbname = logentry.get()
            cursor.execute('CREATE DATABASE (%s) IF NOT EXISTS (%s)', (dbname, dbname))
            con.commit()
            cursor.close()
            con.close()
        else:
            print "Erreur"
    
        con.commit()
        cursor.close()
        con.close()

    Et je récupère la variable logentry.get() comme ceci :

         log = Label(self, text="Votre identifiant client : ")
         log.grid(row=0, column=1)
         var_texte = StringVar()
         global logentry
         logentry = Entry(self, textvariable=var_texte)
         logentry.grid(row=0, column=2)

    J'ai effecteur plusieurs recherche mais sans succès votre aide est la bienvenue ^^

     Merci d'avance ^^

    JULIEN ELMON 



    • Partager sur Facebook
    • Partager sur Twitter
      20 novembre 2019 à 16:12:57

      Bonjour,

      JulienElmon1 a écrit:

      CREATE DATABASE (%s) IF NOT EXISTS (%s)

      La commande CREATE DATABASE ne prend pas de parenthèse ... et le IF vient avant le nom voulu ...

      CREATE DATABASE IF NOT EXISTS %s

      JulienElmon1 a écrit:

      la fonction doit ensuite vérifier si il existe déjà une base de données qui a pour nom l'id client saisie, si elle n'existe pas la fonction doit crée la base de données

      Je ne sais pas si c'est une bonne idée de faire une base par client, surtout si elles sont toutes sur le même serveur ... Si tu fais une modification sur le modèle, tu dois mettre à jour autant de bases que tu as de clients ... pas glop ...

      A mon avis tu seras plus souple en faisant une seule base, avec dans chaque table une colonne id_client pour identifier à quel client appartient l'enregistrement ...

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        25 novembre 2019 à 9:11:44

        Bonjour,

        Merci pour ta réponse :)

        J'ai donc remplacer ma ligne de code par :

        cursor.execute('CREATE DATABASE IF NOT EXISTS %s', (dbname,))

        Mais j'ai la mëme erreur qui est retournée : ProgrammingError: (1064: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near"), je pense que l'erreur de syntaxe vien de ma variable dbname mais je vois pas comment la résoudre :/ .

        On a penser qu'un database par client serait mieux pour notre projet car les database vont contenir beaucoup de tables (horaire, fiche détailler sur agent et plein d'autre table car on va rajouter des fonctionnaliter au fur et à mesure ^^)

        REDIT : J'ai fais quelque recherche et essayer avec juste un CREATE DATABASE "nomdelabdd" et il me dit que l'acées est refusée pour l'utilisateur à la database" nomdelabdd", comme j'utilise infomaniak comme hébergeurs de la base de données, je me demande si j'ai pas un problème de droit par rapport à l'hébergeure :/  

        REDIT 2: Alors je pense que l'erreur ne vient pas de ma variable en fin de requête car elle est afficher dans l'erreur retournée, mais plutôt au niveau de phpmyadmin ou alors de l’hébergeur que j'utilise :/
          

        -
        Edité par JulienElmon1 25 novembre 2019 à 12:02:12

        • Partager sur Facebook
        • Partager sur Twitter
          25 novembre 2019 à 13:36:38

          JulienElmon1 a écrit:

          comme j'utilise infomaniak comme hébergeurs de la base de données

          Chez la plupart des hébergeurs mutualisés tu ne peux pas créer de base de données (CREATE DATABASE). Tu crées la base via la panneau d'admin. Tu peux ensuite faire à l'intérieur ce que tu veux.

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            25 novembre 2019 à 15:30:41

            J'ai appeler le service technique d'infomaniak et il m'ont dis qu'il est effectivement impossible de crée des base de données sur un hébergement mutualisé via un programme externe, par contre ils m'ont dit que c'était possible avec un serveur cloud en accès SSH et un utilisateur root full accès je vais tenter de ce coter ^^
            • Partager sur Facebook
            • Partager sur Twitter
              25 novembre 2019 à 16:27:45

              JulienElmon1 a écrit:

              avec un serveur cloud

              C'est pas le même prix ...

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                25 novembre 2019 à 16:51:59

                Oui je viens de voir ça ..., du coup on va utiliser des table pour chaque client cela sera moin compliquée ^^, 

                Dernière petite question : Dans une requête CREATE TABLE, le "%s" se met avec ou sans parenthèse ? Ou utilise t'il une syntaxe différente ?  

                • Partager sur Facebook
                • Partager sur Twitter
                  25 novembre 2019 à 17:11:31

                  https://dev.mysql.com/doc/refman/8.0/en/create-table.html

                  Un peu de recherche ... la doc est ton amie ...

                  JulienElmon1 a écrit:

                  on va utiliser des table pour chaque client cela sera moin compliquée

                  Je reviens donc sur ma question de départ, si vous êtes sur le même serveur, pourquoi ne pas faire une seule table pour tous les clients, avec une colonne id_client dans chaque table pour préciser de quel client la données est issue ...

                  Là ce sera vraiment plus simple ...

                  -
                  Edité par Benzouye 25 novembre 2019 à 17:12:55

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                    26 novembre 2019 à 11:06:03

                    Trouvée !!!!! ^^

                    Voila la syntaxe pour ceux qui seront dans le même problème que moi :) :

                    cursor.execute("CREATE TABLE %s (nom_societe VARCHAR(255), tel_societe INT(10), idClient VARCHAR(255))" % (tablename))

                    Merci Benzouye pour ta précieuse aide :), 

                    Au débuts on voulait faire une bdd par client vus le nombre de tables qu'on avait mais je me suis renseigné au près d'infomaniak et comme tu l'a dit ce n'est pas le même prix car il faut passer par un serveur cloud donc on va se réorienter sur une table par client :)  

                    • Partager sur Facebook
                    • Partager sur Twitter
                      26 novembre 2019 à 11:20:21

                      JulienElmon1 a écrit:

                      on va se réorienter sur une table par client :)  

                      J'insiste, mais vous ne devriez pas partir ainsi ...

                      Imaginons que vous gériez des clients, des appels, des produits et des commandes, le modèle "unique" pourrait être :

                      • client ( id [pk], nom, etc. )
                      • appel ( id [pk], id_client [fk], date_appel, message, etc. )
                      • produit ( id [pk], designation, etc. )
                      • commande ( id [pk], id_client [fk], date_saisie, etc. )
                      • produit_commande ( id_commande [pk][fk], id_produit [pk][fk], quantite, prix )

                      L'idée est de mettre dans chaque table où c'est nécessaire, l'id du client concerné. Lors de l'affichage tu n'affiches que les données pour le client connecté en filtrant sur son id ...

                      Du coup un seul modèle, une seule base, et toute modification de la base est valable pour tous les clients en même temps ...

                      -
                      Edité par Benzouye 26 novembre 2019 à 11:29:43

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

                      Problème avec "CREATE DATABASE IF NOT EXISTS"

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown