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

Langage SQL Discussion :

Problème d'appel de fonctions Python dans une requête SQL


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Novembre 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Novembre 2018
    Messages : 22
    Points : 8
    Points
    8
    Par défaut Problème d'appel de fonctions Python dans une requête SQL
    Bonsoir,

    J'ai une erreur sur ce script avec le message

    Traceback (most recent call last):
    File "D:\Utilisateurs\Genius\Documents\Programmation\database_parser_IL2_Great_Battles.py", line 521, in <module>
    SET bombs_kg = payload_bombs(Planes.aircraft_name, Planes.payload_id);''')
    sqlite3.OperationalError: no such function: payload_bombs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        cur.execute('''UPDATE Planes
        SET bombs_kg = payload_bombs(Planes.aircraft_name, Planes.payload_id);''')
    pourtant j'importe bien toutes mes fonctions au préalable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from aircraft_payloads import *

    Voici un extrait de mes fonctions dans le fichier aircraft_payloads:

    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
    def payload_name (aircraft_name, payload_id):
        """Extraction of the payload name"""
     
        try:
            b = aircraft_payload[aircraft_name]
        except:
            print("unknow plane")
        else:
            try:
                c = (b[payload_id])
            except:
                print("unknow payload")
            else:
                print (c[1])
                return (c[1])
     
    def payload_bombs (aircraft_name, payload_id):
        """Extraction of the bombs Weight"""
        try:
            b = aircraft_payload[aircraft_name]
        except:
            print("unknow plane")
        else:
            try:
                c = (b[payload_id])
            except:
                print("unknow payload")
            else:
                print (c[2])
                return (c[2])
     
    def payload_rockets (aircraft_name, payload_id):
        """Extraction of the rockets Weight"""
        try:
            b = aircraft_payload[aircraft_name]
        except:
            print("unknow plane")
        else:
            try:
                c = (b[payload_id])
            except:
                print("unknow payload")
            else:
                print (c[3])
                return (c[3])

    Auriez-vous un conseil ?

    Merci d'avance

  2. #2
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 776
    Points : 1 488
    Points
    1 488
    Par défaut
    Est-il possible de se connecter à la base avec un "outil" standard (en dehors du code quoi) et de lancer l'update en question "à la main" pour voir si on à d'autres messages d'erreurs ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Novembre 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Novembre 2018
    Messages : 22
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Michel.Priori Voir le message
    Est-il possible de se connecter à la base avec un "outil" standard (en dehors du code quoi) et de lancer l'update en question "à la main" pour voir si on à d'autres messages d'erreurs ?

    Malheureusement je pense que non car j ai besoin de la fonction pour récupérer les données d une liste python. C est la première fois que j essaye une fonction d un autre programme sur une requête sql python. La syntaxe n est peut être pas bonne.

    Dois je poser ma question sur le forum python ?

    A+

  4. #4
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 776
    Points : 1 488
    Points
    1 488
    Par défaut
    La fonction est définie en python ou en tant que fonction dans le SGBD ?

    La requête étant évaluée par le SGBD, il faut définir via un CREATE FUNCTION en son sein.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Novembre 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Novembre 2018
    Messages : 22
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Michel.Priori Voir le message
    La fonction est définie en python ou en tant que fonction dans le SGBD ?

    La requête étant évaluée par le SGBD, il faut définir via un CREATE FUNCTION en son sein.
    Re,

    Merci de ton aide précieuse, c'était exactement cela.

    Le code corrigé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        conn.create_function("payload_bombs",2,payload_bombs)
        conn.create_function("payload_rockets",2,payload_rockets)
        conn.create_function("payload_name",2,payload_name)
        cur.executescript('''
        UPDATE Planes SET bombs_kg = payload_bombs(Planes.aircraft_name, Planes.payload_id);
        UPDATE Planes SET rockets_kg = payload_rockets(Planes.aircraft_name, Planes.payload_id);
        UPDATE Planes SET payload_n = payload_name(Planes.aircraft_name, Planes.payload_id);
        ''')

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

Discussions similaires

  1. fonction SUM dans une requête sql
    Par bensh dans le forum JDBC
    Réponses: 19
    Dernier message: 29/10/2017, 19h07
  2. Réponses: 6
    Dernier message: 10/05/2016, 15h10
  3. [PostgreSQL] Utiliser une fonction PHP dans une requête SQL
    Par Toiine dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/11/2014, 12h16
  4. Problème d'appel de fonction js dans une page asp.net
    Par diablerouge2000 dans le forum Développement Web avec .NET
    Réponses: 0
    Dernier message: 27/01/2014, 12h26
  5. Réponses: 2
    Dernier message: 19/09/2006, 19h06

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