python - 为什么不从插入烧瓶中获取数据?
问题描述
我正在尝试将一个表中的多个数据插入到另一个表中,但它没有从 HTML 中获取数据,我尝试了几种方法,我也尝试将数字作为变量并直接插入,但它不起作用。
这就是我想要做的,2 个表给我带来了一个值,并将它们插入到一个名为数量的表中,该表有 2 个 id,只有 3 个字段,产品的 id、count 和 id 在哪里,但是当我尝试插入数据,页面只重新加载。
Python
if request.method == 'POST':
try:
dcont = request.form['dcont']
ids = request.form['ids']
cn = request.form['cn']
with sql.connect("DRIVER={SQL Server}; SERVER=AUS_COMPUTO02\SQLEXPRESS; DATABASE=WEBSERVICE; Trusted_Connection = yes;") as con:
cur = con.cursor()
cur = con.execute("INSERT INTO dbo.DETALLECONTEO VALUES (?,?,?)", (dcont,ids,cn))
cur.commit()
msg = "Successfully added"
print(cur)
print(dcont,ids,cn)
except:
con.rollback()
msg = "error inserte la operacion nuevamente"
finally:
# con.close()
return render_template ('result.html')
return render_template('new.html', prov=prov, cnt=cnt, ind=ind )
HTML
<div class="jumbotron">
<div class="form-group">
<form class="form-inline my-2 my-lg-0" action="{{ url_for('new') }}" class="form-control" class="w-auto p-3">
<select name='prove' class="form-control mr-sm-2" aria-label="Search" >
<option value="0"> Selecione su Proveedor </option>
<br action="{{ url_for('new') }}" method='POST'>
{% for p in prov %}
<option value="{{ p.ID }}" > {{ p.DESCRIPCION }} </option>
{% endfor %}
</select>
<button class="btn btn-outline-success my-2 my-sm-0" type="submit" >Seclet</button>
</form>
</div>
<div class="form-group">
<form class="form-inline my-lg-0" action="{{ url_for('adt') }}" method='POST'>
<table class="table" class="form-control">
<thead>
<tr>
<th scope="col">Codigo</th>
<th scope="col">Descipcion</th>
<th acope="col">Cantidad</th>
</tr>
</thead>
<tbody>
{% for c in cnt %}
<tr>
<td >{{ c.codigo }}</td>
<td>{{ c.descripcion }}</td>
<td > <input name='cn' id='cn' type="number" class="form-control"></td>
<td><select name='dcont' id='dcont'>
{% for i in ind %}
<option value=" {{i.Conteo}}"> {{i.Conteo}} </option>
{% endfor %}
</select>
</td>
<td> <select name='ids' id='ids'>
<option value="{{c.id}}"> {{c.id}} </option>
</select>
</td>
{% endfor %}
</tr>
</tbody>
</table>
</tbody>
</table>
<input class="btn btn-outline-success my-2 my-sm-0" type="submit" ><br>
</form>
</div>
</div>
解决方案
需要关注的两个主要领域——首先你的表单没有被告知“发布”数据——它将通过默认的“获取”模式发送它,更改表单代码,添加method="post"
将解决该问题。
<form class="form-inline my-2 my-lg-0" method="post" action="{{ url_for('new') }}" class="form-control" class="w-auto p-3">
所以现在你的表单数据将被 POST'ed - 并且会触发if request.method == 'POST':
逻辑。
您的下一个问题是您的数据以相同命名元素的形式出现——例如,如果您提交了三个条目,您的ids
元素将发布:
ids=3
ids=2
ids=6
所以我们需要使用request.form.getlist('ids')
来获取该数据,因此您最终会得到表单元素的条目列表:
all_ids = request.form.getlist('ids')
all_cn = request.form.getlist('cn')
all_dcont = request.form.getlist('dcont')
现在,如果我们查看可能提交的数据:
>>> print(all_ids)
['3','2','6']
>>> print(all_dcont)
['A','B','C']
>>> print(all_cn)
['X','Y','Z']
但是我们需要将它们作为行来处理——插入到我们的数据库中,这样我们就可以将它们压缩在一起以形成数据的“行”:
rows = zip(all_ids, all_dcont, all_cn)
所以现在我们有:
>>> print(rows)
['3','A','X'], ['2','B','Y'], ['6','C','Z']
我们可以遍历它(有很多方法可以做到这一点,我们会保持简单)以创建要执行的 SQL 语句:
for entry in rows:
query_ids = entry[0]
query_dcont = entry[1]
query_cn = entry[2]
...
cur = con.execute("INSERT INTO dbo.DETALLECONTEO VALUES (?,?,?)", (query_dcont,query_ids,query_cn))
...
推荐阅读
- android - 使用 exoplayer 流式传输 mp4 视频不适用于服务器发送的部分内容
- ruby-on-rails - Ruby on rails 使用 jquery 和 ajax 切换收藏按钮带有“渲染头:no_content Completed 204 No Content”错误
- file - 对于非 ASCII 字符的内容,Jhipster dataUtils.downloadFile 出错
- r - 如何根据 R 中的条件对数据进行部分切片?
- android - 我应该为 Android 应用程序的关于页面使用什么布局 XML?
- c# - 新的 Visual Studio 扩展开发安装缺少命名空间
- php - PHP Curl 请求附加 CurlFile 不工作
- python - ModelForm 中的 Django TypeError
- php - 如何在 Doctrine 查询中设置结果模式?
- reactjs - 如何将 CORS 功能添加到我的 http-gateway (spring-integration-dsl) 中?