【问题标题】:insert to sqlite3 a list of object dictionnary向 sqlite3 插入对象字典列表
【发布时间】:2018-06-03 15:32:56
【问题描述】:

我正在尝试将字典中的值列表插入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】:

    您正在使用 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)
    

    【讨论】:

    • 感谢您的回复,但是当我执行您的代码时,出现此错误 ProgrammingError: Incorrect number of bindings provided。当前语句使用 3,提供了 29 个。
    • @Ilyas 是的,代码中有错误,已修复 - 使用 ListProduct 参数化。
    猜你喜欢
    • 2021-06-05
    • 2017-02-11
    • 2019-01-12
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 2021-03-03
    相关资源
    最近更新 更多