错误flasksqlalchemy name Error:未定义全局名称“joinedload”

2024-05-13 22:19:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用sqlalchemy加载策略来加快查询速度。在阅读this之后,我意识到我犯了在模板中循环记录的错误。唯一的问题是我得到了这个错误:

NameError: global name 'joinedload' is not defined.

这是因为我在使用flask sqlalchemy还是因为我忘了导入一些东西?

型号.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 %}

为了给我的模型提供一些上下文,我有一个检查记录。每次检查都有一个或多个违规行为。每一次违规都要经过多次检查


Tags: name模板idnumberdbsqlalchemy错误记录
2条回答

好吧,错误消息说joinedload没有定义,所以最明显的解决方案是检查您是否导入了它,如果没有-

from sqlalchemy.orm import joinedload

以我的条件,这只是订单问题

class Inspection(db.Model):

class Violations(db.Model):

inspection_violations = ()     //wrong junction table position 

这也不起作用。因为当您使用检查冲突时,它还没有定义。也会报告同样的问题

只要改变顺序就行了

inspection_violations = ()   //right junction table position

class Inspection(db.Model):

class Violations(db.Model):

这是正确的方法。

相关问题 更多 >