美文网首页
关于peewee ORM连表查询(无外键关联情况下)

关于peewee ORM连表查询(无外键关联情况下)

作者: 小钟钟同学 | 来源:发表于2018-09-12 17:05 被阅读519次

说明:

有两个表,在查询数据的时候需要做对应的表管理的查询处理,在使用到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 <module>
    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 <Model: CourseOrder> and <Model: Course>. 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)

补充: Category.alias()新版似乎已经失效,测试有异常

Parent = Category.alias()
sq = (Category
      .select(Category, Parent)
      .join(Parent, on=(Category.parent == Parent.id))
      .where(Parent.name == 'parent category'))

相关文章

  • 关于peewee ORM连表查询(无外键关联情况下)

    说明: 有两个表,在查询数据的时候需要做对应的表管理的查询处理,在使用到join的,但是在直接使用join的是会关...

  • Tortoise筛选关联关系表数据-Prefetch

    在FastApi里面使用Tortoise-orm,查询关联表数据(外键、一对多、多对多等)时,可以用select_...

  • 2021-07-21Sqlalchemy关联查询

    一、无外键关联查询 1.直接查询 2.关联表中字段过多,但是关联获取只取一个字段 3.同一个表查询多次不处理会报错...

  • orm查询操作

    单表查询操作 外键的跨表查询 正向查询(在有外键字段的表向没有的表查询) 反向查询(没有外键的字段向有外键字段的表...

  • ORM 关联关系

    关于文档的注解:仅供学习所用!!! -- ORM的映射关联关系,需要字段之间建立外键(如果指明可以省略建立外键) ...

  • LitePal

    关于LitePal(github地址) 数据库相关(表关联):一对一:数据表根据外键进行关联(哪个表添加外键都可以...

  • MySQL数据库学习day6

    回顾 外键:关联关系(表与表之间:表中字段指向另一张表的主键) 联合查询:union,多表合并和单表不同查询条件 ...

  • django 外键查询 一对多 通过对象查询和通过filter

    外键为publish 表内容: 方法一: 正向查询 是通过子表book对象取得外键pub_id的相关联的publi...

  • sqlalchemy外键关联

    创建外键 关联查询 执行结果:

  • hibernate 关联映射和级联操作

    1、我们说hibernate 是完全ORM的框架,其对数据库的操作完全面向对象的!表跟表之前的关系有外键关联,或通...

网友评论

      本文标题:关于peewee ORM连表查询(无外键关联情况下)

      本文链接:https://www.haomeiwen.com/subject/mwqbgftx.html