我正在使用Flask使用Blueprint构建实验性应用程序。这是我项目的结构:
-myproject/
requirements.txt
run.py
-apps/
-static/
-template/
-database/
__init__.py
views.py
model.py
auth.py
message.py
我在 init .py中启动我的应用,使用蓝图集成应用的其他部分。
app = Flask(__name__)
from .views import views
from .model import model, db
from .auth import auth, login_manager
db.init_app(app)
app.register_blueprint(views)
app.register_blueprint(model)
app.register_blueprint(auth)
然后在views.py
:
from flask import Flask, request, redirect, render_template, session, g, url_for, Blueprint
views = Blueprint('views', __name__)
from sqlalchemy.orm import scoped_session, relation, sessionmaker
# ORM Session
orm_session = scoped_session(sessionmaker())
@views.route('/courses')
def courses():
courses = orm_session.query(Course).order_by('-id')
return render_template('courses.html', courses=courses)
我的Course
课程已在model.py
中定义:
class Course(db.Model):
__tablename__ = 'course'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255), nullable=False)
subjects = db.relationship('Subject', secondary='course_subject_link')
students = db.relationship('Student', secondary='course_student_link')
active = db.Column(db.Boolean)
def __repr__(self):
return "<{0}:{1.name}:{1.subjects!r}:{1.students!r}>".format(Course, self)
在模板文件夹中,我在模板文件中添加了{% for course in courses %}
和{% set active_page = "courses" %}
之类的内容。当我运行应用程序时,它给了我这个错误:
UnboundExecutionError: Could not locate a bind configured on mapper Mapper|Course|course, SQL expression or this Session
之前我没有使用Blueprint,所以应用程序曾经能够运行。但在我使用Blueprint之后,网址似乎被打破了。我该如何解决这个问题?
答案 0 :(得分:0)
我知道问题所在。
从错误消息中的提示我想我忘记了create_engine并使用bind=engine
将引擎传递给sessionmaker。
以下是我在views.py
中更改的代码:
from os.path import join, dirname
_cwd = dirname(__file__)
engine = create_engine('sqlite:///' + join(_cwd, 'database/courses.sqlite'))
Session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
orm_session = Session()
此处database/courses.sqlite
是我的数据库文件的位置。