Deutsch   English   Français   Italiano  
<61add8f3$0$20246$426a74cc@news.free.fr>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder6.news.weretis.net!feeder8.news.weretis.net!news.trigofacile.com!usenet-fr.net!agneau.org!nntpfeed.proxad.net!proxad.net!feeder1-1.proxad.net!212.27.60.64.MISMATCH!cleanfeed3-b.proxad.net!nnrp1-1.free.fr!not-for-mail
Date: Mon, 6 Dec 2021 10:33:38 +0100
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101
 Thunderbird/91.3.2
Subject: =?UTF-8?Q?Re=3a_Fonction_Python_et_MySQL=2c_pour_cr=c3=a9er_une_cl?=
 =?UTF-8?B?w6kgw6l0cmFuZ8OocmU=?=
Content-Language: fr
Newsgroups: fr.comp.lang.python
References: <CAOdnZ2m4f_MZTT8nZ2dnUU7983NnZ2d@giganews.com>
From: Nicolas <nicolasp@aaton.com>
In-Reply-To: <CAOdnZ2m4f_MZTT8nZ2dnUU7983NnZ2d@giganews.com>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Lines: 55
Message-ID: <61add8f3$0$20246$426a74cc@news.free.fr>
Organization: Guest of ProXad - France
NNTP-Posting-Date: 06 Dec 2021 10:33:39 CET
NNTP-Posting-Host: 195.101.33.1
X-Trace: 1638783219 news-1.free.fr 20246 195.101.33.1:2979
X-Complaints-To: abuse@proxad.net
Bytes: 3251

Bonjour,

Le 03/12/2021 à 11:58, Olivier92410 a écrit :
> Bonjour, Je veux insérer dans plusieurs tables une clé étrangère.
Etrangère à quoi ? ;)

Blague à part, c'est un peu léger comme description. Il faudrait au 
moins préciser de quelle type de base de données il s'agit, s'il s'agit 
bien d'une base de données.

> Pour cela, j'ai créé un dictionnaire qui fournira à une fonction les paramètres
> nécessaires à la création de ces clés.
> 
> Ci-dessous, une partie du dictionnaire utilisé, pour rester simple:
> d_fk = {'Bien_Immo': ['fk_Id_Lot', 'Lot', 'Id']}
> 
> Puis la fonction,
> def create_fk(name1, name2, name3, name4):
>      url = "e;mysql+pymysql://{user}:{password}@localhost/{db}"e;
>      engine = create_engine(url.format(user='root', password='Fer458it',
> db='data_immo'))
>      engine.execute(f"e;ALTER TABLE {name1}"e;
>                     f"e;ADD COLUMN {name2},"e;
>                     f"e;ADD CONSTRAINT {name2}"e;
>                     f"e;ADD FOREIGN KEY ({name2}) REFERENCES {name3}({name4})"e;
>                     f"e;ON DELETE CASCADE"e;)
> return
> 
> for key in d_fk.keys():
>      if isinstance(d_fk[key][0], list):
>          for i in range(len(d_fk[key])):
>              [n2, n3, n4] = [d_fk[key][i][0], d_fk[key][i][1], d_fk[key][i][2]]
>              create_fk(key, n2, n3, n4)
>      else:
>          [n2, n3, n4] = [d_fk[key][0], d_fk[key][1], d_fk[key][2]]
>          create_fk(key, n2, n3, n4)
> 
> Ce code retourne une erreur de syntaxe 1064,
Une erreur Python ou une erreur SQL ?
> 
> Si vous avez des idées, elles sont bienvenues !
> Merci
> 

Il faudrait fournir un code minimaliste complet et fonctionnel.
Avec les import qui vont bien.
Attention à l'indentation. Ici, on a un "return" qui est hors fonction.
Il y a des "e;" un peu partout dans le code. A quoi correspondent-ils ?

Globalement, il faut présenter un code utilisable directement par une 
personne qui voudrait/pourrait aider.

Bonne journée,
Nicolas