2013-05-28 47 views
7

私はクエリを高速化するために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 

答えて

13

まあがあり、エラーメッセージがjoinedloadが定義されていないので、明白な解決策は、あなたがそれをインポートしていない場合かどうかを確認することですと言います注文の問題

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): 

これはこれを行うには正しい方法ですが働くようになります変更同じ問題を報告します。

+0

ちょっとBibhas、ありがとう。私はフラスコ延長を使用しているので、それが輸入されているかどうか、またはどこから輸入するかは分かりませんでした。 – Wilberto

+0

'flask-sqlalchemy'は下に' sqlalchemy'を使用しています。したがって、いつでもモジュールをインポートすることができます。 –

+0

@Bibhasあなたが言っていることは正しい100%ですが、Flask-SQLAlchemyはすべてを 'db'にインポートします。だから多分あなたもそれを使うことができます。 – jadkik94

0

、それだけだ - そして、すべての違反は、多くの検査

関連する問題