Résolue

Django dif template/HttpResponse

# Affichage # Django

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 !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.