flask - 无法将 运行 变量添加到 for 循环中的列表以存储 sql 数据库

flask - unable to run a variable to a list in for loop to store the sql database

我无法使用项目列表遍历“查询”变量并将代码推送到数据库。但它正在经历一个错误““ValueError:没有足够的值来解压(预期 2,得到 1)”,有人可以检查代码吗?

@app.route('/', methods=['POST'])
def test():
    if request.method == 'POST':
        try:
            query = request.form['url']
            r = requests.get(query)
            output = r.json()
            items = output['result']

            # # items = ['abc','bcd','cde','def'] # here items will be in list

            for i in items:
                user = User(listOfItems=items[i], query=query)
                db.session.add(user)
                db.session.commit()

            responseBody = {'message': items}
            return make_response(jsonify(responseBody))
        except Exception, e:
            return ('Oops!', e.__class__, 'occurred.')
    else:
        responseBody = {'message': 'failed'}
        return make_response(jsonify(responseBody))

数据库中所需的输出:

listOfItems     query           time_stamp
abc            example.com      -date-
bcd            example.com      -date-
cde            example.com      -date-
def            example.com      -date-
xyz            example1.com      -datetime.now-
yza            example1.com      -datetime.now-
zab            example1.com      -datetime.now-

在这里, query1: example.com returns ['abc','bcd','cde','def'] 列表项 query2: example1.com returns ['xyz','yza','zab'] 列表项

我发现了一些问题:

  • 您不需要 if request.method == 'POST' 语句,您已经在 route 装饰器中声明了方法。
  • for i in itemsreturns来自items的每个元素,i变量不是索引;所以,user = User(listOfItems=items[i], query=query) 是不正确的。

我不确定这些是否能解决您的问题;但如果没有,请显示 itemsoutput.

的输出

这部分代码有问题。 for i in items 表示该索引处的值,而不是索引本身。所以第一次迭代将 return 'abc' 等等。

  for i in items:
      user = User(listOfItems=items[i], query=query)
      db.session.add(user)
      db.session.commit()

假设您想要列表的值并插入它们,将行更改为

      user = User(listOfItems=i, query=query)