2013-05-28 7 views
7

Sto cercando di utilizzare una strategia di caricamento sqlalchemy per velocizzare le mie query. Dopo aver letto this mi sono reso conto che stavo facendo l'errore di scorrere i record nel mio modello. L'unico problema è che ottengo questo errore:Errore flask-sqlalchemy NameError: nome globale 'joinload' non definito

NameError: global name 'joinedload' is not defined.

sta succedendo perché sto utilizzando pallone-sqlalchemy o em I dimenticando di importare qualcosa?

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) 

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

Template:

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

Per dare un po 'di contesto ai miei modelli ho una scheda di verifica. Ogni ispezione ha una o più violazioni. E ogni violazione ha molte ispezioni

risposta

13

Bene, il messaggio di errore dice joinedload non è definito, per cui la soluzione ovvia sarebbe quella di verificare se è stato importato e se non -

from sqlalchemy.orm import joinedload 
+0

Hey Bibhas, grazie. Semplicemente non ero sicuro che sarebbe stato importato o da dove importare dato che sto usando l'estensione del pallone. – Wilberto

+0

'flask-sqlalchemy' sta usando' sqlalchemy' sotto. Quindi puoi sempre importare moduli da esso. –

+0

@Bibhas Anche se quello che stai dicendo è corretto al 100%, Flask-SQLAlchemy importa anche tutto in 'db', quindi forse puoi usarlo anche tu. – jadkik94

0

Sulla mia condizione, è solo un problema con l'ordine

class Inspection(db.Model): 

class Violations(db.Model): 

inspection_violations =()  //wrong junction table position 

questo non funziona anche. Perché quando si utilizza inspection_violations non è ancora definito. e sarà anche segnalare lo stesso problema

semplicemente cambiare l'ordine sarà farlo funzionare

inspection_violations =() //right junction table position 

class Inspection(db.Model): 

class Violations(db.Model): 

questo è il modo giusto per farlo.