【问题标题】:How to pass form data into multiple sqlite3 rows如何将表单数据传递到多个 sqlite3 行
【发布时间】:2020-02-12 15:09:37
【问题描述】:

我正在尝试将 Flask 中的表单数据传递到 sqlite 数据库的多行中。

表单要求用户输入多种成分和所需的成分数量,我正在尝试将它们传递到单独的行中,使用配方名称将行组合在一起。

if request.method == "POST":

    rname = request.form.get('rname')
    customer_id = request.form.get('customer_id')
    ingredient_id = request.form.getlist('product_code')
    ingredient_amount = request.form.getlist('ingredient_amount')

    con = sqlite.connect('database.db')
    cur = con.cursor()
    sql = """INSERT INTO recipes (rname, customer_id, ingredient_id, ingredient_amount) VALUES (?, ?, ?, ?)"""
    cur.executemany(sql, (rname, customer_id, ingredient_id, ingredient_amount,))
    cur.commit()

错误

ValueError: 参数的类型不受支持

在前端,数据传递正常,我可以在网络控制台中看到它。

这段代码哪里出错了?

谢谢。

【问题讨论】:

  • 您有任何类型的数据验证吗?也许正在传递的数据与数据库中指定的数据类型不匹配
  • How can I use executemany to insert into MySQL a list of dictionaries in Python 的可能重复项。看起来您需要创建一个每行具有一致数量值的复合列表。换句话说,您需要复制“单个值”并交错列表,以便它们每行形成一个列表。现在您正在尝试提交一些单个值以及单独的列表,但这不起作用。同时查找executemany 的网络文档。

标签: python sqlite flask


【解决方案1】:

您应该将一系列参数传递给Cursor.executemany(例如,元组列表,请参阅documentation)。在您的情况下,给定错误意味着 rname 不可迭代(我假设它是一个字符串)。

您需要像这样为executemany 正确打包数据

query_args = []

for ind, ingredient in enumerate(ingredient_id):
    data = (rname, customer_id, ingredient, ingredient_amount[ind])
    query_args.append(data)

cur.executemany(sql, query_args)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2018-04-05
    • 1970-01-01
    • 2021-01-25
    • 2017-01-20
    相关资源
    最近更新 更多