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

Interfaçage autre langage Python Discussion :

Problème fonction sql python


Sujet :

Interfaçage autre langage Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2018
    Messages : 2
    Par défaut Problème fonction sql python
    bonjour,

    je crée une application flask avec une base de données , j'utilise la librairie mysql.connector
    j'ai souvent la même erreur depuis quelques jours quand la commande execute prend le nom de la fonction et qu'un seul argument ( quand il y en a plusieurs cela fonctionne très bien,)

    par exemple, la je veux remettre à zero l'autoincrémentation d'une table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    def clean_and_reinitialize_index(table):
    	cnx = mysql.connector.connect(user='root',	
    	database='personnal_info')
    	cursor=cnx.cursor()
    	reinitialise=("TRUNCATE TABLE %s;")
    	cursor.execute(reinitialise,table)
    	cnx.commit()
    	cursor.close()
    	cnx.close()
     
     
    clean_and_reinitialize_index("user")
    et voici l'erreur que j'ai vu énormément:

    mysql.connector.errors.ProgrammingError: 1064 (42000): Erreur de syntaxe près de '%s' à la ligne 1


    merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 25
    Par défaut
    Bonjour,

    Moi je prépare les Query comme celà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nom_table = {'Nom_Table': table}
    query = (TRUNCATE TABLE %{Nom_Table}s)
    cursor.execute(query,nom_table)

  3. #3
    Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2018
    Messages : 2
    Par défaut merci mais toujours le même type d'erreur
    Citation Envoyé par laurentv88 Voir le message
    Bonjour,

    Moi je prépare les Query comme celà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nom_table = {'Nom_Table': table}
    query = (TRUNCATE TABLE %{Nom_Table}s)
    cursor.execute(query,nom_table)

    voici l'erreur ( toujours du même type)

    mysql.connector.errors.ProgrammingError: 1064 (42000): Erreur de syntaxe près de '%{Nom_Table}s' à la ligne 1

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    J'utilise sqlite3 et non mysql, mais je pense que les 2 pilotes Python devraient demander la même syntaxe.

    Si c'est le cas, je pense qu'il y a une confusion entre 2 types différents de passage de paramètres dans la chaine de requête.

    1- cas général d'une chaine de caractères:
    "TRUNCATE TABLE %s;" % ("matable",) ce qui donnera: "TRUNCATE TABLE matable;"

    2- Cas des paramètres passés dans execute (extrait de la doc => execute(sql[, parameters])):
    ces paramètres, optionnels, remplaceront les '?' de la chaine de requête.


    Voilà un exemple dans lequel les 2 modes de passage de paramètres sont présents:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cur.execute("""SELECT * FROM "%s" WHERE %s=?;""" % (table, champ), (valeur,))
    Dans cette chaine de requête, les 2 '%s' seront remplacés respectivement par les valeurs de table et de champ, et le '?' sera remplacé par la valeur passée en paramètre de execute.

    D'expérience (mais ce n'est pas bien expliqué dans la doc):
    - les paramètres passés comme 2ème argument dans execute sont à utiliser pour des valeurs,
    - les noms de tables ou de champs sont à passer avec '%s'.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    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 742
    Par défaut
    Salut,

    Citation Envoyé par tyrtamos Voir le message
    Si c'est le cas, je pense qu'il y a une confusion entre 2 types différents de passage de paramètres dans la chaine de requête.
    Il n'y a pas de confusion: '%s' est équivalent à '?' et chaque pilote (hélas) choisi le style des paramètres qu'il accepte (voir le PEP 249).
    Après, c'est sur que si on doit construire une requête à la volée, il va falloir le faire en deux temps: d'abord construire la chaîne de caractères à passer à la requête (à la sauce Python i.e. des %s par exemple) puis passer chaîne de caractères et paramètres à .execute (qui pourra aussi contenir des %s).

    note: et comme le "style des paramètres" dépend du pilote, soit on a de la chance, soit on ouvre la documentation, on lit les exemples et on essaie d'écrire de petits bouts de codes qui traduisent ses besoins pour vérifier qu'on a bien compris ce qu'on a lu.

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

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    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 742
    Par défaut
    Salut,

    Citation Envoyé par lolomartin Voir le message
    je crée une application flask avec une base de données , j'utilise la librairie mysql.connector
    C'est pas comme si la documentation de cette bibliothèque ne vous donnait pas des exemples de construction des requêtes!
    Avec ('blabla %s', paramètres), paramètres doit être un tuple i.e. (table,)Avec le format étendu, i.e. ('blabla %(table)s', paramètres) paramètres doit être un dictionnaire { 'table': table }.

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

Discussions similaires

  1. [MySQL] problème avec une fonction SQL
    Par sab_info dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 05/08/2010, 10h35
  2. [MySQL] problème de fonction SQL pour modification de table
    Par Purple Haze dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/02/2007, 17h00
  3. Problème de Fonctions SQL renvoyant un ensemble
    Par Sombila dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 12/07/2006, 09h37
  4. Problème fonction PL/SQL
    Par SSJ17Vegeta dans le forum PL/SQL
    Réponses: 2
    Dernier message: 29/10/2005, 21h14

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