Python: Как вставить словарь в базу данных sqlite?

У меня есть база данных sqlite с таблицей со следующими столбцами:

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

Я хочу вставить в него следующий словарь:

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

Ключи словаря - это имена столбцов. Как я могу этого достичь?

 DJJ31 мар. 2015 г., 22:46
Возможным решением было бы изменить Class IterChars () вdocs , Я не был в состоянии приспособить это все же. Взгляд наsqlalchemy может также помочь
 pcalcao06 июн. 2012 г., 13:19
Что вы пробовали? Как вы подключаетесь к базе данных? Вы используете какой-либо ORM?
 DJJ19 февр. 2015 г., 12:21
Вы не можете легко вставить словарь, но вы можете вставить список. Посмотриat the docs
 shobhit07 июн. 2012 г., 12:23
Можете ли вы предоставить код, который вы пробовали ??

Ответы на вопрос(4)

Это способ, который сохраняет безопасность параметров. (Может потребоваться полировка в отделе имен столов)

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)

Смотря на документациюВот Вы можете добавить одну строку:

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

Или вы можете использовать список и добавить несколько строк за один раз:

# 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)
 06 июн. 2012 г., 13:46
Может быть, обновить это, чтобы показать, как можно вставить список словарей asker? С этим я думаю, что ваш ответ лучше, чем мой.

Если, например,c = conn.cursor()и ваш словарь называетсяdict и твой столtablenameтогда можешь написать

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

Который будет вставлять элементы словаря в таблицу, как вам нужно.

Согласно ответу Гарета, если вы используетеMySQLdb ты можешь использоватьexecutemany и передать список значений, которые вы можете получить непосредственно от вашегоdict с помощьюdict.values()

 27 апр. 2018 г., 16:30
Небольшое обновление: словари теперь поддерживают порядок с 3.6, и это поведение будет в спецификации языка с 3.7.
 25 июн. 2014 г., 18:38
Будьте осторожны при сортировке при использовании этого метода, так как курсор будет вставлять на основе порядка, а словари не поддерживают порядок.

Ваш ответ на вопрос