无法将数据插入数据库,但每次 运行 它都 returns 成功
Unable to insert data to the database but it returns success every time i run it
我想将我通过在 jinja 模板中使用 for 循环迭代找到的数据插入 table。当我提交表单时 returns 成功但数据库中没有注册任何内容。
@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')
有趣的是,有一两次我在测试时在我的 table 中找到了数据,但之后什么也没有了。我这里有什么错误吗?
我使用的 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 语句并为其提供多行值,则使用 Execute many - 您为其提供一个元组,而不是元组列表。
@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')
也就是说,它可能不正确 - 您将从 enumerating(oracle_id)
收集的索引作为 id
插入 - 对于每次新迭代,它始终从 0 开始,因此您在不同的位置插入相同的 ID调用 def submit()
.
使用How to debug small programs调试您的代码。
我想将我通过在 jinja 模板中使用 for 循环迭代找到的数据插入 table。当我提交表单时 returns 成功但数据库中没有注册任何内容。
@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')
有趣的是,有一两次我在测试时在我的 table 中找到了数据,但之后什么也没有了。我这里有什么错误吗?
我使用的 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 语句并为其提供多行值,则使用 Execute many - 您为其提供一个元组,而不是元组列表。
@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')
也就是说,它可能不正确 - 您将从 enumerating(oracle_id)
收集的索引作为 id
插入 - 对于每次新迭代,它始终从 0 开始,因此您在不同的位置插入相同的 ID调用 def submit()
.
使用How to debug small programs调试您的代码。