我有这个查询返回一个学生对象列表:
query = db.session.query(Student).filter(Student.is_deleted == false())
query = query.options(joinedload('project'))
query = query.options(joinedload('image'))
query = query.options(joinedload('student_locator_map'))
query = query.options(subqueryload('attached_addresses'))
query = query.options(subqueryload('student_meta'))
query = query.order_by(Student.student_last_name, Student.student_first_name,
Student.student_middle_name, Student.student_grade, Student.student_id)
query = query.filter(filter_column == field_value)
students = query.all()
查询本身并不需要花费太多时间。问题是将所有这些对象(可以是5000+)转换为Python dicts。这个对象花了一分多钟。目前,代码循环遍历对象并使用to_dict()进行转换。我也尝试过_dict__,速度要快得多,但这似乎并没有转换所有的关系对象。
如何快速转换所有这些Student对象和相关对象?
答案 0 :(得分:0)
也许这会对你有帮助......
sudo python3.5 -m pip install opencv-python
答案 1 :(得分:0)
query = query.options(joinedload('attached_addresses').joinedload('address'))
通过将地址joinload链接到attached_addresses,我能够显着加快查询速度。
我理解为什么会这样:
地址对象未加载初始查询。通过循环的每次迭代,db都会被命中以检索Address对象。使用联接加载时,现在会在初始查询时加载Address对象。
感谢Corley Brigman的帮助。