Clé étrangère non reconnu en Mysql python

Résolu/Fermé
Wilfried_Wotrom02 Messages postés 2 Date d'inscription jeudi 22 décembre 2022 Statut Membre Dernière intervention 23 décembre 2022 - 22 déc. 2022 à 22:25
yg_be Messages postés 23535 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2025 - 23 déc. 2022 à 09:30

Bonsoir la team avant de vous poser mon problème je vais vous mettre dans le contexte je bosse sur un projet d'une minibanque que je dévéloppe en Python et MySql bref le souci est que j'ai deux tables dans la base de donnée CSIBANK que j'ai crée en mysql dont client et compte. Donc la table compte possède un champ 'id_client' comme clé étrangère faisant référence à la clé primaire de la table client. et Maintenant le programme doit se comporter de telle en sorte que ,l'utilisateur entre ses informations et automatiquement ses informations sont enregistrés dans les tables client et compte mais le souci est que le programme plant à cause du fait que lors de l'insertion des données dans la table compte le SGBD demande de renseigner la clé étrangère id_cli pour continuer 

au niveau de val2 le SGBD me demande de renseigner la clé étrangère or je veux que le nouvel id_cli générer par la BD soit automatiqueemnt utilisé lors de la création du compte

voici le code python:

import mysql.connector

connexion= mysql.connector.connect(host='localhost',database= 'csibank', user='root', password='')

curseur= connexion.cursor()

print('Bienvenue sur la CSI BANK')

while True:

    print("1.Créer un compte 2.Dépot d'argent 3.Retrait d'argent 4.Détails du compte 5.Sortie ")

    choix= int(input('Entrez votre choix: '))

    choix_list= [1,2,3,4,5]

    try:

        for choixs in choix_list:

            if choix==1:

                dateA='CURRENT_TIMESTAMP'

                nom= str(input('Entrer votre nom et prénom: '))

                sexe=str(input('Entrer votre sexe M pour maxulin et F pour Féminin: '))

                sexe_list= ['M','F']

                if sexe in sexe_list:  

                    type_client=str(input('Quelle est le type de client P ou M?: '))

                    type_list= ['P','M']

                    if type_client in type_list:

                            age_client=int(input("Entrer l'age du client: "))

                            if ((age_client>=18) & (age_client<=75)):

                                type_compt= str(input('Entrez le type du compte E ou C: '))

                                typecompt_list= ['E','C']

                                if type_compt in typecompt_list:

                                        IBAN= int(input("ENtrez l'IBAN du compte SVP: "))

                                        solde= int(input('Entrer le montant à verser dans le compte: '))

                                        if solde>1000:

                                            req_sql1= 'insert into client(id_cli,nom_cli,sexe,type_cli,age_cli) values (%s,%s,%s,%s,%s)'

                                            val= (curseur.lastrowid,nom,sexe,type_client,age_client)

                                            req_sql2= 'insert into compte (id_compte,dateA,type_compte,IBAN,solde,id_cli) values (%s,%s,%s,%s,%s,%s)'

                                            val2= (curseur.lastrowid,dateA,type_compt,IBAN,solde,id_cli)

                                            curseur.execute(req_sql1,val)

                                            curseur.execute(req_sql2,val2)

                                            connexion.commit()

                                            print(f"{nom} votre compte a été créé avec succès")

                                        else:

                                            print("Le solde du compte doit etre supérieur à 1000")

                                            break

                                else:

                                    print("Entrer un type de compte valide")

                                    break

                            else:

                                print("Vous ne pouvez pas créer un compte dans notre banque en raison de votre age")

                                break

                    else:

                        print("Entrer un type de client valide")

                        break

                else:

                    print("Entrez une valeur valide")

                    break

            elif choix==2:

                no_compte=input("entrer l'id du compte: ")

                mont_de= int(input('Entrez le montant à déposer dans votre compte: '))

                id_caiss= input('Quel est Votre id caissier(e): ')

                id_clien= input("Entrez l'id du client: ")

                id_trans=input('Entrez un id de transaction')

                typeo= "d"

                datet= 'CURRENT_TIMESTAMP'

                req_sql3= 'insert into transactions(id_trans,datet,montant,typet,id_cais,id_compte,id_cli) values (%s,%s,%s,%s,%s,%s,%s)'

                val3=(id_trans,datet,mont_de,typeo,id_caiss,no_compte,id_clien)

                curseur.execute(req_sql3,val3)

                curseur.execute("update compte set solde= solde+'"+str(mont_de)+ "' where id_compte='"+ no_compte + "'")

                print(f"Le dépot de {mont_de} a été correctement effectué sur le compte n°{no_compte}")

                connexion.commit()

                break

            else:

                print("Entrer un nombre correct")

                break

    except:

        print("Quelque chose s'est mal passé")

voici le MLD de la base de donnée:

client(id_client, nom_cli,sexe_cli,type_cli)

compte(id_compte,dateA,type_compte,IBAN,Solde,#idcli)

informaticien(id_info,nom_info,type_info,sexe_info)

caissière(id_caissiere,nom_cais,prenom_cais)

transaction(id_transaction,datet,montant,typet,libelle,#id_caissiere,#id_compte,#id_client)

acceder(#id_compte,#id_info,numoperation)

client(id_client, nom_cli,sexe_cli,type_cli)

compte(id_compte,dateA,type_compte,IBAN,Solde,#idcli)

informaticien(id_info,nom_info,type_info,sexe_info)

caissière(id_caissiere,nom_cais,prenom_cais)

transaction(id_transaction,datet,montant,typet,libelle,#id_caissiere,#id_compte,#id_client)

acceder(#id_compte,#id_info,numoperation)

Merci de m'aider SVP


A voir également:

1 réponse

jordane45 Messages postés 38471 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2025 4 742
22 déc. 2022 à 22:34

Bonjour,

A l'avenir, pour poster du code sur le forum, merci d'utiliser l'icone prévue à cet effet lorsque tu rédiges ton message.

Ensuite, pour ton souci, il suffit de récupérer le "last insert id".

Pour ça, tu peux regarder par ici : https://www.google.com/search?q=python+mysql+last+insert+id


0
Wilfried_Wotrom02 Messages postés 2 Date d'inscription jeudi 22 décembre 2022 Statut Membre Dernière intervention 23 décembre 2022
23 déc. 2022 à 07:27

Ok Compris merci

0
yg_be Messages postés 23535 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2025 1 579 > Wilfried_Wotrom02 Messages postés 2 Date d'inscription jeudi 22 décembre 2022 Statut Membre Dernière intervention 23 décembre 2022
23 déc. 2022 à 09:30

bonjour, Peux-tu alors marquer la discussion comme résolue?

0