Pergunta sobre python, sqlite, dictionary – Python: Como inserir um dicionário em um banco de dados sqlite?

6

Eu tenho um banco de dados sqlite com uma tabela com as seguintes colunas:

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

Eu quero inserir o seguinte dicionário para ele:

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

As chaves do dicionário são os nomes das colunas. Como posso conseguir isso?

Uma solução possível seria modificar a Classe IterChars () nodocs . Eu não pude adaptá-lo embora. Uma olhadasqlalchemy pode ajudar também DJJ
O que você tentou? Como você está se conectando ao banco de dados? Você está usando algum tipo de ORM? pcalcao
você não pode inserir um dicionário facilmente, mas pode inserir uma lista. Dar uma olhadanos docs DJJ
Você pode por favor fornecer algum código que você tentou? shobhit

Sua resposta

4   a resposta
6

recisar de polimento no departamento tablename)

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

Olhando a documentaçãoAqui você pode adicionar uma única linha:

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

Ou você pode usar uma lista e adicionar várias linhas de uma só vez:

# 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)
Talvez atualizar isso para mostrar como uma lista de dicionários do autor da pergunta pode ser inserida? Com isso, acho que sua resposta é melhor que a minha. Eliot Ball
1

MySQLdb você pode usarexecutemany e passar uma lista de valores que você pode obter diretamente do seudict usandodict.values()

pequena atualização: os dicionários agora mantêm a ordem a partir de 3.6, e esse comportamento estará na especificação de linguagem a partir de 3.7. Yekta Leblebici
Tenha cuidado ao classificar ao usar este método, pois o cursor irá INSERIR com base na ordem e os dicionários não manterão a ordem. Harrison
4

Se, por exemplo,c = conn.cursor(), e seu dicionário é nomeadodict e sua mesatablenameentão você pode escrever

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

Que irá inserir os elementos do dicionário na tabela conforme necessário.

Perguntas relacionadas