我是 Flask 的初学者。我创建了一个由我的models.py定义的sqlite 数据库,并用 values 填充了它。我想使用 search_var.html 文件打印后端数据库表中的所有内容:line_info。但是,我收到一个错误,请帮助
我的模型.py
from app import db
class line_info(db.Model):
id = db.Column(db.Integer, primary_key=True)
EUSOL_id = db.Column(db.VARCHAR (255), nullable=True)
acc_id = db.Column(db.VARCHAR (255), nullable=True)
acc_name=db.Column(db.String(20), nullable=True)
reasons = db.Column(db.String(100), nullable=True)
genbank = db.Column(db.String(100), nullable=True)
def __init__(self, EUSOL_id,acc_id,acc_name,reasons,genbank):
self.EUSOL_id= EUSOL_id
self.acc_id = acc_id
self.acc_name = acc_name
self.reasons = reasons
self.genbank = genbank
我从 Python shell 添加了一些虚拟值来测试:
from app import db, app
from app.models import line_info
l = line_info(EUSOL_id='abcdeg', acc_id='asgd', acc_name='tomato_name', reasons='wild', genbank='NA')
db.app = app
db.init_app(app)
db.create_all()
db.session.add(l)
db.session.commit()
line_info.query.all()
[<line_info 1>]
我的路线.py
from flask import render_template
from app import app
@app.route('/')
def search_func():
line_info = None
line_info = line_info.query.all()
return render_template("search_var.html", line_info=line_info)
if __name__ == '__main__':
app.run(debug = True)
我的“search_var.html”
{% extends "layout.html" %}
{% block title %}Search{% endblock %}
{% block main %}
<h1>Lines</h1>
{% for line in line_info %}
<p>{{line_info.id}}</p>
{% endfor %}
{% endfor %}
错误:
Traceback (most recent call last):
File "/home/workstation1/flask_beta/my_venv/lib/python3.6/site-packages /flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/home/workstation1/flask_beta/my_venv/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/workstation1/flask_beta/my_venv/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/workstation1/flask_beta/my_venv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/workstation1/flask_beta/my_venv/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/home/workstation1/flask_beta/my_venv/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/workstation1/flask_beta/app/routes.py", line 9, in search_func
line_info = line_info.query.all()
AttributeError: 'NoneType' object has no attribute 'query'
我的目录树
/flask_beta
|__/app
| |__models.py
| |__routes.py
| |__/templates
| |__search_var.html
|__app.db
|__run.py
|__config.py
您不能为模型line_info
命名,然后对实例列表使用相同的名称。line_info
现在是局部变量,它也不能是全局名称,这就是为什么UnboundLocalError
在删除line_info = None
行时会出现异常的原因。
为结果使用不同的名称line_info.query.all()
。您不需要首先设置任何内容None
:
from flask import render_template
from app import app
from model import line_info
@app.route('/')
def search_func():
lines = Line_info.query.all()
return render_template("search_var.html", line_info=lines)
您仍然可以line_info
在模板中使用,尽管这也不是真正推荐的。
相反,我建议您重命名模型以遵循Python 命名约定;使用CamelCase
,带大写首字母,不带_
下划线:
class LineInfo(db.Model):
# ...
现在更容易与局部变量区分开来。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句