2013-05-28 13 views
7

Próbuję użyć strategii ładowania sqlalchemy, aby przyspieszyć moje zapytania. Po przeczytaniu this zdałem sobie sprawę, że popełniłem błąd, przechodząc przez rekordy w moim szablonie. Jedynym problemem jest to, że ja dostać ten błąd:Błąd flask-sqlalchemy NameError: nazwa globalna "linkedload" nie jest zdefiniowana

NameError: global name 'joinedload' is not defined.

tak się dzieje, ponieważ używam skrzynkowego SQLAlchemy lub EM I zapominając importować coś?

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) 

Naruszenie Blueprint:

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

Szablon:

{% 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 %} 

dać trochę kontekst moich modeli Mam rekord inspekcji. Każda inspekcja ma jedno lub więcej naruszeń. I każde naruszenie ma tyle oględzin

Odpowiedz

13

dobrze, komunikat o błędzie mówi joinedload nie jest określona, ​​więc oczywistym rozwiązaniem byłoby, aby sprawdzić, czy to importowane, a jeśli nie -

from sqlalchemy.orm import joinedload 
+0

Hej Bibhas, dzięki. Po prostu nie byłam pewna, czy importowano lub gdzie importować, ponieważ używam rozszerzenia kolby. – Wilberto

+0

'flask-sqlalchemy' używa pod spodem' sqlalchemy'. Więc zawsze możesz importować moduły z niego. –

+0

@Bibhas Chociaż to, co mówisz, jest poprawne w 100%, Flask-SQLAlchemy także importuje wszystko do 'db', więc może będziesz mógł z niego skorzystać. – jadkik94

0

Na moim stanie, to tylko problem z zamówieniem

class Inspection(db.Model): 

class Violations(db.Model): 

inspection_violations =()  //wrong junction table position 

to też nie zadziała. Gdy użyjesz funkcji inspekcji, to nie jest ona jeszcze zdefiniowana. a także zgłosić ten sam problem

wystarczy zmienić kolejność będzie to działało

inspection_violations =() //right junction table position 

class Inspection(db.Model): 

class Violations(db.Model): 

jest to dobry sposób, żeby to zrobić.

Powiązane problemy