如何从单个Flask路由执行两个SQL命令

时间:2018-05-07 06:55:18

标签: python mysql flask

我正在使用Flask创建一个Web应用程序。我在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 :(得分:0)

首先,当你这样做时,你只需要一个数据块:

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,您可以使用简单的示例。

您可以使用这些模型调用查询并插入或更新函数,以便顺利处理它。