将SQLAlchemy对象转换为Python dicts的快速方法

时间:2018-03-21 19:04:05

标签: python sqlalchemy flask-sqlalchemy

我有这个查询返回一个学生对象列表:

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对象和相关对象?

2 个答案:

答案 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的帮助。