62 votes

Utilisation d'un dictateur Python pour une instruction SQL INSERT

J'essaie d'utiliser un dict pour faire un SQL INSERT . La logique serait essentiellement la suivante :

INSERT INTO table (dict.keys()) VALUES dict.values()

Cependant, j'ai du mal à trouver la syntaxe/le flux correct pour le faire. Voici ce que j'ai actuellement :

# data = {...}
sorted_column_headers_list = []
sorted_column_values_list = []
for k, v in data.items():
    sorted_column_headers_list.append(k)
    sorted_column_values_list.append(v)
sorted_column_headers_string = ', '.join(sorted_column_headers_list)
sorted_column_values_string = ', '.join(sorted_column_values_list)

cursor.execute("""INSERT INTO title (%s) 
            VALUES (%s)""", 
            (sorted_column_headers_string, sorted_column_values_string))

J'obtiens alors une exception SQL (je pense qu'elle est liée au fait que des virgules sont également incluses dans certaines de mes valeurs). Quelle serait la manière correcte de procéder ?

0voto

Umair Points 5054

Cela fonctionne pour moi

cursor.execute("INSERT INTO table (col) VALUES ( %(col_value) )", 
        {'col_value': 123})

0voto

Mr.K Points 1

Si vous avez une liste dans laquelle il y a un certain nombre de dictionnaires par exemple : lst=[d1,d2,d3,d4]

alors celui ci-dessous fonctionnera pour moi :

for i in lst:
    placeholders = ', '.join(['%s'] * len(i))
    columns = ', '.join(i.keys())
    sql = "INSERT INTO %s ( %s ) VALUES ( %s )" % (table, columns, placeholders)
    cursor.execute(sql,list(i.values()))
conn.commit()

Note : Ne pas n'oubliez jamais de valider, sinon vous ne pourrez pas voir les colonnes et les valeurs insérées dans la table.

0voto

Suat Atan Points 54

Disons que nos données sont :

data = {
        "name" : "fani",
        "surname": "dogru",
        "number" : 271990
    }

C'est ma version courte :

tablo =  "table_name"
cols = ','.join([f" {k}" for k in data.keys()])
vals = ','.join([f"'{k}'" for k in data.values()])
stmt = f'INSERT INTO {tablo} ({cols}) VALUES ({vals})'

-2voto

nniikkii Points 11

Qu'en est-il :

keys = str(dict.keys())
keys.replace('[', '(')
keys.replace(']', ')')
keys.replace("'",'')

vals = str(dict.values())
vals.replace('[', '(')
vals.replace(']', ')')

cur.execute('INSERT INTO table %s VALUES %s' % (keys, vals))

Pour python 3 :

keys = str(dict.keys())[9:].replace('[', '').replace(']', '')
vals = str(dict.values())[11:].replace('[', '').replace(']', '')

...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X