2013-05-28 2 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 %} 

가 나는 검사 기록을 가지고 내 모델에 약간의 컨텍스트를 제공합니다. 모든 검사에는 하나 이상의 위반이 있습니다. 그리고 모든 위반이 많은 검사

에게

답변

13

음을 가지고, 오류 메시지가 joinedload 당신이 그것을 가져올 경우 확실한 해결책 확인하는 것입니다, 그래서 정의하지 않을 경우되지 말한다 - 내 조건에

from sqlalchemy.orm import joinedload 
+0

안녕하세요. Bibhas, 감사합니다. 플라스크 확장 기능을 사용하고 있기 때문에 가져 오기를 가져 왔는지 또는 가져올 위치가 확실하지 않았습니다. – Wilberto

+0

'flask-sqlalchemy'는 밑에'sqlalchemy'를 사용하고 있습니다. 따라서 모듈을 항상 가져올 수 있습니다. –

+0

@Bibhas Flask-SQLAlchemy는 100 % 정확하다고 말하고 있지만 모든 것을 'db'로 가져옵니다. 따라서이 값을 사용할 수도 있습니다. – jadkik94

0

, 그것은 단지 당신이 아직 정의되지 않은 것 inspection_violations를 사용할 때 주문 문제

class Inspection(db.Model): 

class Violations(db.Model): 

inspection_violations =()  //wrong junction table position 

이 too.because 작동하지 않습니다. 또한 같은 문제를

를보고 단순히 순서가

inspection_violations =() //right junction table position 

class Inspection(db.Model): 

class Violations(db.Model): 

이이 작업을 수행 할 수있는 권리 방법 일 것 변경합니다.

관련 문제