我尝试使用sqlalchemy加载策略来加快查询速度。阅读this后,我意识到我错误地在模板中循环记录。唯一的问题是我收到了这个错误:
NameError:全局名称' joinedload'没有定义。
这是否正在发生,因为我使用flask-sqlalchemy或者我忘了导入某些东西?
Models.py:
inspection_violations = db.Table('inspection_violations',
db.Column('violation_id', db.Integer, db.ForeignKey('violations.violation_number')),
db.Column('inspection_id', db.Integer, db.ForeignKey('inspection.inspection_id')), )
class Inspection(db.Model):
inspection_id = db.Column(db.Integer, primary_key=True)
violations = db.relationship('Violations', secondary=inspection_violations, backref=db.backref('inspection', lazy='dinamic'))
facility_id = db.Column(db.String(100), db.ForeignKey('facilities.branch_name'))
class Violations(db.Model):
violation_number = db.Column(db.Integer, primary_key=True)
details = db.Column(db.Text)
违规蓝图:
@violations_blueprint.route('/violations/<int:violation_number>')
def show_single_violation(violation_number):
violation = Violations.query.options(joinedload('inspection')).get(violation_number)
return render_template('violations/single-violation.html' ,violation=violation)
模板:
{% for inspection in violation.inspection %}
<p><a href="{{ url_for('inspection_blueprint.show_inspection', id=inspection.inspection_id) }}"> {{ inspection.facilities.branch_name }}</a></p>
{% endfor %}
为了给我的模型提供一些背景信息,我有一份检查记录。每次检查都有一次或多次违规。每次违规都有很多检查
答案 0 :(得分:14)
好吧,错误消息显示joinedload
未定义,因此显而易见的解决方案是检查是否导入了它,如果没有 -
from sqlalchemy.orm import joinedload
答案 1 :(得分:0)
就我而言,这只是一个订单问题
class Inspection(db.Model):
class Violations(db.Model):
inspection_violations = () //wrong junction table position
这也行不通。因为当你使用inspection_violations它还没有定义。并且还会报告同样的问题
只需更改订单即可使其正常工作
inspection_violations = () //right junction table position
class Inspection(db.Model):
class Violations(db.Model):
这是执行此操作的正确方法。