向sqlite3插入一个对象字典列表

问题描述 投票:0回答:1

我试图从字典中插入值列表到sqlite3数据库。这是我的代码,当我运行代码时会出现此错误:

ProgrammingError:提供的绑定数量不正确。当前语句使用3,并提供2。

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()
python python-3.x sqlite
1个回答
0
投票

您正在使用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)
© www.soinside.com 2019 - 2024. All rights reserved.