向sqlite3插入一个object dictionary列表

2024-05-23 17:14:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将字典中的值列表插入到sqlite3数据库中。这是我的代码,运行代码时出现此错误:

ProgrammingError: Incorrect number of bindings supplied. The current statement uses 3, and there are 2 supplied.

import sqlite3
import re
import sys
import sqlite3
import pandas as pd

ListProduct={'nom_produit':[], 'prix':[], 'note':[]}

ListProduct['nom_produit'].append("Capuche Hip Hop Automne Hiver")
ListProduct['prix'].append('$3.9')
ListProduct['note'].append('4.5')
ListProduct['nom_produit'].append("Capuche Hip Hop Automne Hiver")
ListProduct['prix'].append('$12.9')
ListProduct['note'].append('4.8')

# Permet de se connecter à la base de données
conn = sqlite3.connect("mabase.db")   
    # Initialise le curseur
cur = conn.cursor()

    # Créer la table si elle n'existe pas

cur.execute("CREATE TABLE IF NOT EXISTS Produit (nom_product VARCHAR,price real, rating real)")

for key,values in ListProduct.items():

     cur.execute("""INSERT INTO Produit(nom_product, price,rating) VALUES(:nom_produit, :prix,:note)""", values)

    # Accepter les changements

cur.execute('SELECT * FROM Produit')
meida = cur.fetchone()
print(meida)
conn.commit()

    # Fermer la connexion
conn.close()

Tags: 代码importexecuteconnnomsqlite3lanote
1条回答
网友
1楼 · 发布于 2024-05-23 17:14:27

您正在使用3个命名占位符::nom_produit:prix:note,这使得sqlite3期望values成为包含nom_produitprixnote键的字典。你知道吗

但是,您的values值是列表。你知道吗

ListProduct的定义更改为:

ListProduct= [
    {
        'nom_produit': "Capuche Hip Hop Automne Hiver",
        'prix': '$3.9',
        'note': '4.5'
    },
    {
        'nom_produit': "Capuche Hip Hop Automne Hiver",
        'prix': '$12.9',
        'note': '4.8'
    }
]

然后,您甚至可以完全避免循环并切换到executemany()

cur.executemany("""
    INSERT INTO 
        Produit
        (nom_product, price, rating) 
    VALUES
        (:nom_produit, :prix, :note)
""", ListProduct)

相关问题 更多 >