2016-03-13 3 views
0

Я пытаюсь обновить строку в базе данных, но она не работает. Я не знаю, где бы я ошибся.Строка обновления флажка-SQLAlchemy с request.form

Traceback (most recent call last): 
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__ 
    return self.wsgi_app(environ, start_response) 
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception 
    reraise(exc_type, exc_value, tb) 
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app 
    response = self.full_dispatch_request() 
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1477, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1381, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1475, in full_dispatch_request 
    rv = self.dispatch_request() 
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1461, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
File "/var/www/demo/demo.py", line 466, in dodajk1 
    record.si = request.form['si'] 
AttributeError: 'NoneType' object has no attribute 'si' 

Мой models.py

class CC1(dbu.Model): 
    __tablename__ = 'cc1' 
    id = dbu.Column('id',dbu.Integer, primary_key = True) 
    si = dbu.Column('si', dbu.Float) 
    snd = dbu.Column('snd', dbu.Float) 
    snh = dbu.Column('snh', dbu.Float) 
    sno = dbu.Column('sno', dbu.Float) 
    so = dbu.Column('so', dbu.Float) 
    ss = dbu.Column('ss', dbu.Float) 
    xa = dbu.Column('xa', dbu.Float) 
    xh = dbu.Column('xh', dbu.Float) 
    xi = dbu.Column('xi', dbu.Float) 
    xnd = dbu.Column('xnd', dbu.Float) 
    xp = dbu.Column('xp', dbu.Float) 
    xs = dbu.Column('xs', dbu.Float) 

def __init__(self,si,snd,snh,sno,so,ss,xa,xh,xi,xnd,xp,xs): 
       self.si = si 
       self.snd = snd 
       self.snh = snh 
       self.sno = sno 
       self.so = so 
       self.ss = ss 
       self.xa = xa 
       self.xh = xh 
       self.xi = xi 
       self.xnd = xnd 
       self.xp = xp 
       self.xs = xs 

И наконец view.py:

@app.route('/dodajk1', methods=['POST']) 
def dodajk1(): 
     if request.form['przycisk'] == 'Submit': 
       record = dbu.session.query(CC1).get(1) 
       record.si = request.form['si'] 
       record.snd = request.form['snd'] 
       record.snh = request.form['snh'] 
       record.sno = request.form['sno'] 
       record.so = request.form['so'] 
       record.ss = request.form['ss'] 
       record.xa = request.form['xa'] 
       record.xh = request.form['xh'] 
       record.xi = request.form['xi'] 
       record.xnd = request.form['xnd'] 
       record.xp = request.form['xp'] 
       record.xs = request.form['xs'] 
       dbu.session.commit() 
     return redirect(url_for('k1')) 
+1

ошибка говорит, что '' record' является None', а не форма. В качестве основного ключа нет записи с '1'. – dirn

+0

Любая идея, как это исправить? – emilkaanna

+0

Без понимания вашего приложения, нет. Вы намеренно обновляете только одну запись или передаете идентификатор в форме? Вы используете эту форму для создания новых записей или просто редактирования? – dirn

ответ

1

Поскольку вы только хотите обновить одну запись, вам не нужно использовать get. Вместо того, чтобы в качестве основного ключа выбрать запись с 1, выберите первую запись.

dbu.session.query(CC1).first() 

Поскольку вы используете колбовую SQLAlchemy, вы можете сократить это

CC1.query.first() 
Смежные вопросы