Django dif template/HttpResponse
Bonjour a tous je suis a la premiere formation Django et pour l onstant je ne vois pas la differrence entre emplate et HttpResponse dans notre utilisation .Un template c est un "modele" donc on pourrait lui rajouter des couleur image ... et modifier a volonté alors que HttpResponse ne renvois que du texte ?
Salut,
J'ai besoin de créer une fonction dynamique pour l'INSERT / UPDATE d'une DB MYSQL depuis un fichier json que j'ai créé au préalable.
J'ai trouvé l'écriture principale du code mais je bloque encore sur une bêtise.
Mon problème provient des simple quote pour les string.
Si ma string > len 128 avec un simple quote dans la string j'ai l'erreur suivante :
pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]The identifier that starts with 'test avec des quotes ' si hypocalcémie, éventuellement encoder le calcium corrigé (fausse hypocalcémie?) et/demander calcium ion' is too long. Maximum length is 128. (103) (SQLExecDirectW)")
Si < len 128 toujours avec un simple quote j'ai :
pyodbc.ProgrammingError: ('42S22', "[42S22] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid column name 'test avec des quotes ' si'. (207) (SQLExecDirectW)")
J'ai trouvé des solutions comme du .replace() mais je trouve ça moche...
Voici mon app test :
import json
from connexion import DataConn
def get_json_datas(file):
with open(file, "r", encoding="UTF-8") as f:
j_load = json.load(f)
return j_load
file = r"tmp\prop.json"
datas = get_json_datas(file)
with DataConn() as db:
cn, cur = db
# Parcours la liste de dictionnaires
for data in datas:
table = "property" # Table sql à traiter
# Converti en chaîne de caractères notre liste de clés pour l'insert sql
columns = [e for e in data.keys()]
insert_columns = ",".join(columns)
update_columns= "=?,".join(columns[2:])
dict_val = []
# Ajoute dans un dictionnaire les valeurs liés à notre liste de clés
for value in data.values():
val = value
# Converti les liste en chaine de caractères
if isinstance(value, list):
val = ", ".join(value)
# Converti les boolean en bit, 1=True, 0=False
elif isinstance(value, bool):
if value == True:
val = 1
else:
val = 0
# Converti les none en NULL pour la requete sql
if value == None and not isinstance(value, int):
dict_val.append('NULL')
else:
dict_val.append(val)
values = tuple(dict_val) # Converti notre dictionnaire de valeurs en tuple pour l'insert sql
# Vérifie si la ligne existe déjà
cur.execute(f"""SELECT id FROM property WHERE id = ?""", data['id'])
check_if_prop = cur.fetchone()
if check_if_prop:
# Update datas
cur.execute("UPDATE {} SET {}=? WHERE id={}".format(table, update_columns, data['id']), values[2:])
else:
# Insert datas
cur.execute("INSERT INTO {} ({}) VALUES {}".format(table, insert_columns, values))
cur.commit() # Commit la requête sql vers la db
Si vous avez une forma/doc à me donner à la place de répondre particulièrement à mon code c'est bon aussi. Je n'ai juste pas trouvé de forma 'avancée' sur ce thème.
Merci pour votre aide.
Benoit
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte