关于peewee|关于peewee ORM连表查询(无外键关联情况下)
说明:
有两个表,在查询数据的时候需要做对应的表管理的查询处理,在使用到join的,但是在直接使用join的是会关联无外键.
如:
query = (CourseOrder.select(CourseOrder,Course).join(Course).where((CourseOrder.course_code_id == Course.course_code_id)))
print(query.sql())
for issd in query:
print(issd.course.price)
print(issd.course_name)
执行的结果是:
Traceback (most recent call last):
File "D:/python_learn/KnowledgePay/business/logic/api_db_logics/user_info_logic2.py", line 863, in
query = (CourseOrder.select(CourseOrder,Course).join(Course).where((CourseOrder.course_code_id == Course.course_code_id)))
File "C:\Users\Administrator\AppData\Roaming\Python\Python35\site-packages\peewee.py", line 615, in inner
method(clone, *args, **kwargs)
File "C:\Users\Administrator\AppData\Roaming\Python\Python35\site-packages\peewee.py", line 6095, in join
on, attr, constructor = self._normalize_join(src, dest, on, attr)
File "C:\Users\Administrator\AppData\Roaming\Python\Python35\site-packages\peewee.py", line 6023, in _normalize_join
src_model, dest_model, to_field, on)
File "C:\Users\Administrator\AppData\Roaming\Python\Python35\site-packages\peewee.py", line 6072, in _generate_on_clause
(src, dest))
ValueError: Unable to find foreign key between and . Please specify an explicit join condition.
提示的是缺少对应的关联的外键。
但是我这边很少依赖外键关联来处理数据。
最后改成为:
query = (CourseOrder.select(CourseOrder,Course).join(Course,on=(CourseOrder.course_code_id == Course.course_code_id)))
print(query.sql())
但是在输出对应的管理所有表的时候:
发现需要查Course的时候,没有对应的值,但是执行uery.sql()语句是有的:
打印了对应所有该对象下所有的属性值,貌似也没找到对应的Course信息。
仔细一看好像是有一个:
文章图片
image.png 最终才知道原来管理查询出来之后,变为了里面一个子对象实例被包含在里面,所以应该这个输出对应的值:
PS:issd.course
for issd in query:
print(dir(issd))
print(issd.course.price)
print(issd.course_name)
【关于peewee|关于peewee ORM连表查询(无外键关联情况下)】补充: Category.alias()新版似乎已经失效,测试有异常
Parent = Category.alias()
sq = (Category
.select(Category, Parent)
.join(Parent, on=(Category.parent == Parent.id))
.where(Parent.name == 'parent category'))
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- 四首关于旅行记忆的外文歌曲
- 醒不来的梦
- 关于自我为中心的一点感想
- 「按键精灵安卓版」关于全分辨率脚本的一些理解(非游戏app)
- 关于Ruby的杂想
- 关于读书的思考
- 关于this的一些问题(1)
- 《声之形》
- 关于如何沟通的1/2/3