python - 无法将数据插入数据库,但每次运行它都会返回成功

标签 python mysql flash-message

我想将我通过在 jinja 模板中使用 for 循环进行迭代找到的数据插入到表中。当我提交表单时返回 SUCCESS 但数据库中未注册任何内容。

@app.route('/submit', methods=['GET','POST'])
def submit():
    if request.method == 'POST':
        cur = connection.cursor()
        userDetails = request.form
        oracle_id = userDetails.getlist('id')
        name = userDetails.getlist('name')
        status = userDetails.getlist('status')
        remark = userDetails.getlist('remark')
        for i, id in enumerate(oracle_id):
            stmt = "insert into attendance( oracle_id, name, status, shift, remark) VALUES(%s, %s, %s, %s, %s)"
            cur.executemany(stmt, (id,oracle_id[i], name[i], status[i], remark[i]))
            cur.commit()
        return 'That is success'
    return render_template('take_attendance.html')

有趣的是,有一两次我在测试时在表中找到了数据,但之后什么也没有出现。我这里有什么错误吗?

我使用的 HTML 表单是

<form action="{{ url_for('submit') }}" method="POST" name="attendance">

<table cellpadding="2" width="20%" bgcolor="#F7F7F7" align="center" cellspacing="10">
    <tr>
        <td colspan=2>
        <center><font size=4><p>Attendance</p></font></center>
        </td>
    </tr>
    <tr>
        <td align="center">ID</td>
        <td align="center">Name</td>
        <td align="center">Status</td>
        <td align="center">Remark</td>
    </tr>

    {% 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">1130</option>
            <option value="W" selected>1122</option>
        </select></td>
        <td><textarea rows="1" cols="20" name="remark"></textarea></td>
    </tr>
 {% endfor %}

    <tr>
        <td>
            <input type="reset">
        </td>
        <td colspan="2">
            <input type="submit" value="Submit">
        </td>
    </tr>
</table>

</form>

我尝试了一个多星期,但没有任何改变。预先感谢您的努力。

最佳答案

如果您准备一条没有数据的 SQL 语句并向其提供多行值,则使用“执行多个” - 您向其提供一个元组,而不是元组列表。

@app.route('/submit', methods=['GET','POST'])
def submit():
    if request.method == 'POST':
        cur = connection.cursor()
        userDetails = request.form
        oracle_id = userDetails.getlist('id')
        name = userDetails.getlist('name')
        status = userDetails.getlist('status')
        remark = userDetails.getlist('remark')

        # marry the right data:
        data = list(zip(range(len(oracle_id)),oracle_id,name,status,remark))

        # range(len(oracle_id)) delivers the same ids as your code does
        # wich is most probably **wrong** on many levels...

        stmt = "insert into attendance( oracle_id, name, status, shift, remark) VALUES(%s, %s, %s, %s, %s)"
        cur.executemany(stmt, data) # provide the list of rows to execute many
        cur.commit()
        return 'That is success'
    return render_template('take_attendance.html')

也就是说,它可能不正确 - 您插入从 enumerate(oracle_id) 收集的索引作为 id - 对于每个新迭代,该索引始终从 0 开始,因此您在对 def Submit() 的不同调用中插入相同的 ID。

使用How to debug small programs调试您的代码。

关于python - 无法将数据插入数据库,但每次运行它都会返回成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50314106/

相关文章:

Python - 如何将输出文本向左/向上移动?

mysql - xampp 中的 Innodb 设置似乎找不到 my.cnf 文件

php - Sql连接查询返回未指定字段值的记录

python - 确实返回停止python脚本

python - 扩展 twins.web 的 static.File 类时出现问题

python - Python 中的 BMI 计算器

mysql - 想要按两列分组,包括每天

java - 将 Flask 消息淡出为多条消息

javascript - connect-flash 和 jade : unable to show flash messahe