From 52293d614ba736cba327247507174d61eb4dde91 Mon Sep 17 00:00:00 2001 From: Colas Geier Date: Fri, 17 Jun 2022 13:20:15 +0200 Subject: [PATCH] =?UTF-8?q?updt=20fonction=20update=5Fto=5Fsql=20-=20Mise?= =?UTF-8?q?=20=C3=A0=20jour=20des=20donn=C3=A9es=20avec=20un=20champ=20enu?= =?UTF-8?q?m?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pycen/update.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/pycen/update.py b/pycen/update.py index 3b4c754..d529911 100644 --- a/pycen/update.py +++ b/pycen/update.py @@ -21,6 +21,13 @@ def __get_pkey__(engine,table_name,schema): pk = engine.dialect.get_pk_constraint(engine,table_name=table_name,schema=schema) return pk +def __get_dtype__(engine,table_name,schema): + cols = engine.dialect.get_columns(engine,table_name=table_name,schema=schema) + # name_cols = [i['name'] for i in cols] + # type_cols = [i['type'] for i in cols] + type_cols = {i['name']:i['type'] for i in cols} + return type_cols + def _get_dic(self): if self._table: select_cols = DIC_REF_HAB[self._table] @@ -238,9 +245,18 @@ class update: primary_key = key_name pkey = __get_pkey__( con,table_name=table,schema=schema) + type_cols = __get_dtype__( + con,table_name=table,schema=schema) - if pkey not in df.columns: - exit('Le champs clé primaire "%s" ne figure pas dans le DataFrame'%pkey) + if not all(item in pkey['constrained_columns'] for item in df.columns): + print('Le(s) champs clé primaire "%s" ne figure pas dans le DataFrame'%pkey['constrained_columns']) + Q = input('Voulez-vous continuer la mise à jour ? (y/n) ') + if Q.lower() == 'y': + pass + else : + return print('Données non mise à jour') + # if pkey not in df.columns: + # exit('Le champs clé primaire "%s" ne figure pas dans le DataFrame'%pkey) if isinstance(primary_key, str): primary_key = [primary_key] @@ -249,7 +265,12 @@ class update: if col in primary_key: b.append("t.{col}=f.{col}".format(col=col)) else: - a.append("{col}=t.{col}".format(col=col)) + dtype = type_cols[col] + if hasattr(dtype,'enums') : + dty = '.'.join([dtype.schema,dtype.name]) + a.append("{col}=t.{col}::{typ}".format(col=col,typ=dty)) + else: + a.append("{col}=t.{col}".format(col=col)) if isinstance(df, gpd.GeoDataFrame): df.to_postgis(