Как выполнить две команды SQL из одного маршрута Flask - PullRequest
0 голосов
/ 07 мая 2018

Я создаю веб-приложение с помощью Flask. У меня есть несколько таблиц в базе данных MySql. все, что я хочу, это запросить данные одной таблицы в форму, внести некоторые изменения и вставить эти данные обратно в другую таблицу. у меня есть этот маршрут

Я внес эти изменения в код.

@app.route('/attendance', methods=  ['GET','POST'])
def attendance():
    cur = connection.cursor()
    resultValue = cur.execute('''SELECT * FROM employee_data WHERE team = "ta15"''')
    if resultValue > 0:
        userDetails = cur.fetchall()
        return render_template('take_attendance.html', userDetails=userDetails)

    if request.method == 'POST':
        userDetails = request.form
        oracle_id = userDetails.getlist('oracle_id')
        name = userDetails.getlist('name')
        status = userDetails.getlist('status')
        remark = userDetails.getlist('remark')
        stmt= "insert into attendance( id, name, status, remark) VALUES(%s, %s, %s, %s)"
        for i , id in enumerate(id):
            cur.excutemany(stmt, (id[i], name[i], status[i], remark[i]))
            cur.commit()

$ А это моя форма

{% for data in userDetails %}

    <tr>

        <td><input type="text" name="oracle_id" id="oracle_id" size="6" value="{{data.oracle_id}}"></td>

        <td><input type="text" name="name" id="name" size="20" value="{{data.name}}"></td>
        <td>
        <select name="status">

            <option value="-1">select..</option>
            <option value="A">A</option>
            <option value="TR" selected>1160</option>
            <option value="DR">1122</option>
            <option value="OR">1020</option>

        </select></td>
        <td>
        <select name="shift">
            <option value="-1">select..</option>
            <option value="Morning">7</option>
            <option value="Afternoon" selected>15:00</option>
        </select>
        </td>
        <td><textarea rows="1" cols="20" name="remark"></textarea></td>
    </tr>
{% endfor %}

запрос работает нормально, предоставляя необходимые данные в форму, проблема в том, что он вставляет только первые данные в форму. В любом случае я могу это исправить в рамках одного маршрута? Или есть лучший способ сделать это?

1 Ответ

0 голосов
/ 07 мая 2018

Во-первых, вы запрашиваете только один блок данных, когда делаете это:

user = request.form
oracle_id = user['id']

Вместо этого используйте getlist

ids = request.form.getlist('id')
name = request.form.getlist('name')

и затем:

stmt = "insert into today( id, name, status, remark) VALUES(%s, %s, %s, %s)"
for i, id in enumerate(ids):
    cur.executemany(stmt, (id, name[i],.......))
    cur.commit()

Что-то в этом роде, работайте над этим, я вам подсказал.

Во-вторых, вы можете использовать GET POST по одному маршруту, чтобы различать ваш запрос SELECT и INSERT. Просто сделайте что-то вроде этого:

if request.method == 'POST':
     #insert sql part here
else:
     #get sql part here

Предложение: Я бы настоятельно рекомендовал использовать Модели, так как он упрощает ваш код и помогает превратить грязное приложение в чистое. Вы можете прочитать о Python SqlAlchemy , есть простые примеры, которые вы можете использовать.

Вы можете вызывать запросы и вставлять или обновлять функции, используя эти модели, чтобы беспрепятственно обрабатывать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...