2013-05-28 24 views
7

Tôi đang cố gắng sử dụng một chiến lược tải sqlalchemy để tăng tốc độ truy vấn của tôi. Sau khi đọc this Tôi nhận ra rằng tôi đã mắc sai lầm khi lặp qua các bản ghi trong mẫu của tôi. Vấn đề duy nhất là tôi nhận được lỗi này:Lỗi bình phương sqlalchemy NameError: tên toàn cầu 'joinload' không được xác định

NameError: global name 'joinedload' is not defined.

Điều này xảy ra vì tôi đang sử dụng bình phương sqlalchemy hoặc em quên nhập gì đó?

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) 

Vi phạm 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) 

mẫu:

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

Để đưa ra một số ngữ cảnh để mô hình của tôi Tôi có một biên bản kiểm tra. Mọi kiểm tra đều có một hoặc nhiều vi phạm. Và mỗi vi phạm có nhiều cuộc thanh tra

Trả lời

13

Vâng, thông báo lỗi nói joinedload không được xác định, vì vậy giải pháp hiển nhiên sẽ là để kiểm tra xem bạn nhập nó và nếu không muốn nói -

from sqlalchemy.orm import joinedload 
+0

Xin chào Bibhas, cảm ơn. Tôi chỉ không chắc chắn nếu nó đã được nhập khẩu hoặc nơi để nhập khẩu kể từ khi tôi đang sử dụng phần mở rộng bình. – Wilberto

+0

'bình-sqlalchemy' đang sử dụng' sqlalchemy' bên dưới. Vì vậy, bạn luôn có thể nhập các mô-đun từ đó. –

+0

@Bibhas Mặc dù những gì bạn đang nói là chính xác 100%, Flask-SQLAlchemy cũng nhập mọi thứ vào 'db', vì vậy có thể bạn cũng có thể sử dụng nó. – jadkik94

0

On tình trạng của tôi, nó chỉ là một vấn đề đặt hàng

class Inspection(db.Model): 

class Violations(db.Model): 

inspection_violations =()  //wrong junction table position 

điều này cũng sẽ không hoạt động. Bởi vì khi bạn sử dụng inspection_violations chưa được xác định. và cũng sẽ báo cáo cùng một vấn đề

chỉ đơn giản là thay đổi thứ tự sẽ làm cho nó hoạt

inspection_violations =() //right junction table position 

class Inspection(db.Model): 

class Violations(db.Model): 

này là đúng cách để làm điều này.

Các vấn đề liên quan