如何在 Flask 应用程序中向 SQL 存储过程插入可变参数

How to insert variable parameter to SQL stored procedure in Flask app

我正在为我的 Flask 应用寻求一些建议。我希望用户能够单击产品名称,当他们单击时,它会将用户带到一个新页面,其中包含该特定项目的 table 历史订单。我已经查看了这两个问题(以及更多),但它们似乎没有我正在寻找的答案。 Table Variable As a parameter In My sql Stored Procedures how to pass output parameter to ms-sql stored procedure using knex

在我的 app.py 文件中,我有以下存储过程 -

order_history = '''exec Web_ProductHistory ?'''

这是它的关联路由和函数 -

@app.route('/prev-orders/')
def previous_orders():
   ItemID = request.form.get('ItemID')
   cursor = cnxn.cursor()
   cursor.execute(order_history, (ItemID))
   data = cursor.fetchall()
   return render_template('previous-orders.html', data=data)

我有一个 table 装满库存物品的工作,这里是 table -

{% for value in data %}
       <tr>
          <td class="hidden"></td>
          <td></td>
          <td><span style="margin-left: 40px">{{ value[1] }}</span></td>
          <td><a name="{{ value[0] }}" class="black-text" href="{{url_for('previous_orders')}}" target="_blank">{{ value[3] }}</a></td>
          <td>{{ value[12] }}</td>
          <td>{{ value[23] }}</td>
          <td class="over-25">{{ value[18] }}</td>
          <td>{{ value[6] }}</td>
          <td>{{ value[7] }}</td>
          <td><a name="{{ value[0] }}" class="black-text" href="{{url_for('live_so')}}" target="_blank">{{ value[14] }}</a></td>
          <td>{{ value[16] }}</td>
          <td>{{ value[15] }}</td>
          <td>{{ value[22] }}</td>
          <td>{{ value[2] }}</td>
       </tr>
   {% endfor %}

value[0] 是 ItemID 整数。

到目前为止,我已经尝试将路线更改为 @app.route('/prev-orders/')@app.route('/prev-orders/ItemID') 但那不行。然后我尝试将第二行更改为 def previous_orders(ItemID) 但这也无法正常工作。

你有什么建议让我尝试让它工作吗?谢谢!

request.form.get('ItemID')

这需要发布 ItemID。如果你想在 URL 中传递它,那么做这样的事情:

@app.route('/prev-orders/<integer:ItemID>')
def previous_orders(ItemID):
   cursor = cnxn.cursor()
   # ... rest of code

然后在您的 HTML 中生成 link:

<a href="{{ url_for('previous_orders', ItemID = value[0]) }}">{{ value[3] }}</a>

此外,作为旁注,我认为以下行应该是:

cursor.execute(order_history, (ItemID,))

(注意使第二个参数成为有效元组的额外逗号,我认为这是 execute 方法所期望的)