Как вставить параметр переменной в хранимую процедуру SQL в приложении Flask

Мне нужен совет для моего приложения Flask. Я хочу, чтобы пользователь мог щелкнуть имя продукта, и когда он щелкает, он переводит пользователя на новую страницу с таблицей исторических заказов для этого конкретного элемента. Я рассмотрел эти два вопроса (и другие), но, похоже, на них нет ответа, который я ищу. Переменная таблицы как параметр в моих хранимых процедурах sql как передать выходной параметр в хранимая процедура ms-sql с использованием 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)

У меня есть таблица, заполненная рабочими товарами, а вот таблица -

{% 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') < / em> но это не так. Затем я попытался изменить вторую строку на def previous_orders (ItemID), но это тоже не помогло.

Есть ли у вас какие-нибудь советы, как заставить это работать? Спасибо!


person pc90    schedule 28.05.2020    source источник


Ответы (1)


request.form.get('ItemID')

Ожидается, что ItemID будет опубликован. Если вы хотите передать его в URL-адресе, сделайте что-нибудь вроде:

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

Затем сгенерируйте ссылку в своем HTML с помощью:

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

Кроме того, я думаю, что следующая строка должна быть:

cursor.execute(order_history, (ItemID,))

(обратите внимание на дополнительную запятую, которая делает этот второй аргумент допустимым кортежем, чего, я думаю, ожидает метод execute)

person v25    schedule 28.05.2020