Frage an python, dictionary, sqlite – Python: Wie füge ich ein Wörterbuch in eine SQLite-Datenbank ein?

6

Ich habe eine SQLite-Datenbank mit einer Tabelle mit folgenden Spalten:

id(int) , name(text) , dob(text)

Ich möchte folgendes Wörterbuch einfügen:

{"id":"100","name":"xyz","dob":"12/12/12"}

Wörterbuchschlüssel sind die Spaltennamen. Wie kann ich das erreichen?

Eine mögliche Lösung wäre, die Class IterChars () im zu änderndocs . Ich konnte es jedoch nicht anpassen. EIn Blick aufSqlalchemie könnte auch helfen DJJ
Was hast du versucht? Wie stellen Sie eine Verbindung zur Datenbank her? Verwenden Sie irgendeine Art von ORM? pcalcao
Können Sie bitte einen Code bereitstellen, den Sie versucht haben? shobhit
Sie können ein Wörterbuch nicht einfach einfügen, aber Sie können eine Liste einfügen. Guck malbei den docs DJJ

Deine Antwort

4   die antwort
1

MySQLdb Sie können verwendenexecutemany und übergeben Sie eine Liste von Werten, die Sie direkt von Ihrem erhalten könnendict mitdict.values()

kleines Update: Wörterbücher behalten jetzt die Reihenfolge von 3.6 bei, und dieses Verhalten wird in der Sprachspezifikation von 3.7 sein. Yekta Leblebici
Seien Sie vorsichtig beim Sortieren, wenn Sie diese Methode verwenden, da der Cursor basierend auf der Reihenfolge EINFÜGEN wird und Wörterbücher die Reihenfolge nicht beibehalten. Harrison
6

der die Parametersicherheit bewahrt. (Muss möglicherweise in der Abteilung für Tabellennamen poliert werden)

def post_row(conn, tablename, rec):
    keys = ','.join(rec.keys())
    question_marks = ','.join(list('?'*len(rec)))
    values = tuple(rec.values())
    conn.execute('INSERT INTO '+tablename+' ('+keys+') VALUES ('+question_marks+')', values)

row = {"id":"100","name":"xyz","dob":"12/12/12"}
post_row(my_db, 'my_table', row)
8

Schauen Sie sich die Dokumentation anHier Sie können eine einzelne Zeile hinzufügen:

c.execute("INSERT INTO stocks VALUES (?,?,?)", [dict["id"], dict["name"], dict["dob"]])

Oder Sie können eine Liste verwenden und mehrere Zeilen auf einmal hinzufügen:

# Larger example that inserts many records at a time
purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
             ('2006-04-05', 'BUY', 'MSFT', 1000, 72.00),
             ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
            ]
c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)
Aktualisieren Sie dies möglicherweise, um zu zeigen, wie eine Liste der Wörterbücher des Fragestellers eingefügt werden kann? Damit finde ich deine Antwort besser als meine. Eliot Ball
4

Wenn zum Beispielc = conn.cursor(), und Ihr Wörterbuch heißtdict und dein Tischtablename, dann kannst du schreiben

c.execute('insert into tablename values (?,?,?)', [dict['id'], dict['name'], dict['dob']])

Dadurch werden die Elemente des Wörterbuchs wie gewünscht in die Tabelle eingefügt.

Verwandte Fragen