私はクエリを高速化するためにsqlalchemyローディング戦略を使用しようとしています。 thisを読んだ後、私は自分のテンプレートのレコードをループしている間違いをしていることに気付きました。唯一の問題は、私はこのエラーを取得することです:私は何かをインポートするには、忘れフラスコSQLAlchemyのか、EMを使用していますので、フラスコ - sqlalchemy NameError:グローバル名 'joinedload'が定義されていません
NameError: global name 'joinedload' is not defined.
は、この起こっているのでしょうか?
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 %}
は私が検査記録を持っている私のモデルにいくつかのコンテキストを与えます。検査ごとに1つまたは複数の違反があります。私の条件に
from sqlalchemy.orm import joinedload
ちょっとBibhas、ありがとう。私はフラスコ延長を使用しているので、それが輸入されているかどうか、またはどこから輸入するかは分かりませんでした。 – Wilberto
'flask-sqlalchemy'は下に' sqlalchemy'を使用しています。したがって、いつでもモジュールをインポートすることができます。 –
@Bibhasあなたが言っていることは正しい100%ですが、Flask-SQLAlchemyはすべてを 'db'にインポートします。だから多分あなたもそれを使うことができます。 – jadkik94