2017-12-21 20 views
0

辞書から値のリストをsqlite3データベースに挿入しようとしています。これは私のコードであり、このエラーは、私は、コード実行したときに表示されます:prix:nom_produit:prixsqlite3valuesnom_produitを含む辞書であることを期待することができます:noteオブジェクト辞典のリストを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() 

答えて

0

をあなたが3つのという名前のプレースホルダを使用していますキーはnoteです。

ただし、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) 
+0

お返事に感謝しかし、私はあなたのコードを実行し、私はこのエラーがあります。ProgrammingError:不正な数のバインディングが提供されました。現在のステートメントでは3が使用され、29が指定されています。 – Ilyas

+0

@Ilyasええ、コードに間違いがあり、 'ListProduct'で固定パラメータ化しました。 – alecxe

関連する問題