Вопрос по python, dictionary, sqlite – Python: Как вставить словарь в базу данных sqlite?

6

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

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

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

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

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

Вы не можете легко вставить словарь, но вы можете вставить список. Посмотриat the docs DJJ
Можете ли вы предоставить код, который вы пробовали ?? shobhit
Возможным решением было бы изменить Class IterChars () вdocs , Я не был в состоянии приспособить это все же. Взгляд наsqlalchemy может также помочь DJJ
Что вы пробовали? Как вы подключаетесь к базе данных? Вы используете какой-либо ORM? pcalcao

Ваш Ответ

4   ответа
4

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

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

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

1

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

Небольшое обновление: словари теперь поддерживают порядок с 3.6, и это поведение будет в спецификации языка с 3.7.
Будьте осторожны при сортировке при использовании этого метода, так как курсор будет вставлять на основе порядка, а словари не поддерживают порядок.
8

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

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

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

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)

Похожие вопросы