【发布时间】:2016-03-13 20:07:07
【问题描述】:
我正在尝试更新数据库中的一行,但它不起作用。我不知道我可能在哪里犯了错误。
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'
我的模型.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'))
【问题讨论】:
-
错误提示
record是None,而不是表单。没有以1为主键的记录。 -
知道如何解决这个问题吗?
-
在不了解您的应用程序的情况下,没有。您是故意只更新一条记录还是在表单中传递一个 id?您是使用此表单创建新记录还是只是编辑?
-
我只想更新一条记录。当用户给我一个新值但我的数据库中不能有多个记录时,我有一个表单。当我向数据库添加 nee 记录时,它可以工作:@app.route('/dodajk1', methods=['POST']) def dodajk1(): if request.form['przycisk'] == 'Zapisz':记录 = CC1(si=request.form['si'], [...], xs=request.form['xs']) dbu.session.add(record) dbu.session.commit() return redirect( url_for('k1'))
-
我认为您的错误是假设您插入的记录的主键为
1,但显然不是这样。
标签: python-2.7 flask sqlalchemy flask-sqlalchemy