【问题标题】:Django/Python POST data from form (without using models) to MySQL dbDjango/Python POST 数据从表单(不使用模型)到 MySQL 数据库
【发布时间】:2015-09-29 09:47:02
【问题描述】:

我正在尝试将模板表单中的数据插入 MySQL 数据库,但它不起作用。

形式:

class AddPollForm(forms.Form):
    poll_time = forms.CharField(label='Tiempo Poll', max_length=10) 
    poll_ip = forms.CharField(label='IP', max_length=50) 
    communitydata = forms.CharField(label='Community Data', max_length=100)
    snmp_oid = forms.CharField(label='OID', max_length=250)
    lastcheck = forms.CharField(label='Última Comprobación', max_length=20)

我在模板中的表单:

<form action="/services/listpolls/" method="post">{% csrf_token %}
    {{ form }}
    <input type="submit" id="add" value="Añadir">
</form>

意见:

@csrf_exempt
def listpolls(request):
    connect_mysql = mdb.connect('****', '***', '***', 'noname_jc_sandbox')
    cursorMYSQL = connect_mysql.cursor(mdb.cursors.DictCursor)
    query = "select id,ip,polling_time,communitydata,snmp_oid,lastcheck from snmptt_listpolls order by ip desc limit 100"
    cursorMYSQL.execute(query)
    b = cursorMYSQL.fetchall()
    connect_mysql.close()

    if request.method == 'POST':

        form = AddPollForm(request.POST)

        if form.is_valid():

            poll_time = form.cleaned_data['poll_time']
            ip = form.cleaned_data['poll_ip']

            connect_mysql = mdb.connect('***', '***', '***', 'noname_jc_sandbox')
            cursorMYSQL = connect_mysql.cursor(mdb.cursors.DictCursor)
            cursorMYSQL.execute("insert into snmptt_listpolls (ip, polling_time) values (34, 34)")

            connect_mysql.commit()
            connect_mysql.close()

            return HttpResponseRedirect('listpolls.html')

        else:
            form = AddPollForm()
            return render_to_response("listpolls.html",{"buffer_data": b, 'form': form} )        

    else:
        form = AddPollForm()
        return render_to_response("listpolls.html",{"buffer_data": b, 'form': form} )    

在这里,我们从数据库中获取数据并将其显示在表格中,效果很好。我也有表格,当我按添加时,我想向数据库添加另一行。

字段的类型有:

| id            | int(11)      | NO   | PRI | NULL    | auto_increment |
| ip            | varchar(50)  | NO   |     | NULL    |                |
| polling_time  | int(10)      | NO   |     | NULL    |                |
| communitydata | varchar(100) | NO   |     | NULL    |                |
| snmp_oid      | varchar(250) | YES  |     | NULL    |                |
| lastcheck     | datetime

【问题讨论】:

  • 说“它不起作用”并不是很有帮助。哪个部分不工作?如果在表单无效时从 else 语句中删除 form = AddPollForm(),则模板应显示任何表单错误。
  • 如果您要手动生成每个查询,那么使用 django 毫无意义,您可以忽略它!即使您想偶尔运行原始 sql,您仍然可以在管理器中使用 raw() 方法。
  • 我在该用户的上一个问题中同时提出了 Alasdair 和 e4c5 的观点。不幸的是,目前还不清楚她想要做什么。
  • 另外,它比之前暗示的更糟糕,因为您现在在一个视图中打开和关闭数据库连接两次。这是,不要说得太细了,废话。
  • 这里为什么不能使用django ORM?您可以在设置中定义多个数据库并使用managed=False 创建模型,这意味着django 不会触及模型对应的表结构。

标签: python mysql django forms


【解决方案1】:

最后,这是我需要的路线,但我无法到达那里,而且我不知道如何更好地解释自己。无论如何,我找到了答案,以防万一,这里是:

cursorMYSQL.execute("""insert into snmptt_listpolls (ip, polling_time, communitydata, snmp_oid) values ('%s','%s','%s','%s')"""%(ip, poll_time, communitydata, snmp_oid))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2021-05-03
    • 2014-08-16
    • 2021-05-26
    • 2021-06-28
    相关资源
    最近更新 更多