Как вставить параметр переменной в хранимую процедуру SQL в приложении Flask - PullRequest
0 голосов
/ 28 мая 2020

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

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

{% 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), но это тоже не помогло.

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

1 Ответ

0 голосов
/ 28 мая 2020
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)

...