2016-02-29 92 views
2

我是Flask的新手,我嘗試使用SQLAlchemy將表單數據從燒瓶表單保存到數據庫,我沒有任何運氣。我已經嘗試了幾種方法從我在這個論壇以外的研究中找到。Python燒瓶保存表格數據到數據庫

當我採取簡單的路線時,Web表單可以工作,我可以輸入數據但不會填充數據庫。

---- ----型號

class QIDMapping(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    qid_number = db.Column(db.Integer) 
    br_field_name = db.Column(db.String(75)) 
    vendor_field = db.Column(db.String(75)) 

---- ----形式

​​

---- ----意見

from flask import render_template, flash, redirect, session, url_for, 
request, g 
from flask_wtf import form 
from app import app, db 
from .forms import QIDForm 
from .models import User, QIDMapping 
from flask.ext.sqlalchemy import SQLAlchemy 


@app.route('/qidmapping', methods=['GET', 'POST']) 
def qid_map_update(): 
    form = QIDForm() 
    return render_template('qidmapping.html', 
          title='QID Mapping', 
          form=form) 

---- qidmapping.html ----

{% block content %} 

    <h1>Map QIDs to Vendor File</h1> 
    <form action="" method="POST"> 
     {{form.hidden_tag()}} 
     <p> 
      Please enter the QID, BrassRing Field Name and Vendor Tag 
      <br> 
      <h2>QID Number {{ form.qidnumber(size=25) }}<br></h2> 
      <h2>BR Field {{ form.brfieldname(size=25) }}<br></h2> 
      <h2>Vendor Field {{ form.vendorfieldname(size=25) }}<br></h2> 
     </p> 
     <p><br> 
     </p> 
     <p><input type="submit" value="Save Fields"> 
     </p> 
    </form> 
{% endblock %} 

我也試過這個帖子中的方法Flask - WTForm - save form to db 當我這樣做,我得到一個方法不允許的錯誤,我不知道爲什麼。

----鑑於問題20837209格式----

@app.route('/qidmapping', methods=['GET', 'POST']) 
def qid_map_update(): 
    form = QIDForm() 
    if form.validate_on_submit(): 
     newform = (
      form.qidnumber.data, 
      form.brfieldname.data, 
      form.vendorfieldname.data 
      ) 
     db.session.add(newform) 
     db.session.commit() 
     return redirect('/qidmapping') 
    return render_template('qidmapping.html', 
          title='QID Mapping', 
          form=form) 

任何幫助將不勝感激!

回答

1

嘗試

m = QIDMapping() 
m.qid_number = form.qidnumber.data 
m.br_field_name = form.brfieldname.data 
m.vendor_field = form.vendorfieldname.data 
db.session.add(m) 

更換

newform = (
      form.qidnumber.data, 
      form.brfieldname.data, 
      form.vendorfieldname.data 
      ) 
db.session.add(newform) 

...如果不工作。做你的標準POST故障排除:

1)驗證POST請求

2)確保CSRF工作正常。

3)登錄驗證錯誤/成功

4)檢查DB例外

+0

謝謝彼得,我要把這一個嘗試! – paliaso

+0

工作正常!再次感謝彼得! – paliaso

+0

沒問題,很高興幫助。 –