【问题标题】:Expert system (used for database access) vs. ORM专家系统(用于数据库访问)与 ORM
【发布时间】:2017-01-16 19:32:11
【问题描述】:

我最近发现了PyKE,并注意到给定的潜在用途示例之一(实际上,它最初的用途)是编译 SELECT 语句以查询数据库,并将结果映射到一本字典。作者强调这不是ORM。

由此,我有两个子问题:

  1. 如何使用 PyKE(或其他能够执行或发出代码或返回结构化数据以供调用程序使用的专家系统)不是有效的 ORM?
  2. 在什么情况下最好使用专家系统(例如 PyKE)来查询数据库,而不是专门构建的 ORM?我认为肯定有一些,因为 PyKE 是为此目的而设计的。

【问题讨论】:

    标签: python orm language-agnostic expert-system pyke


    【解决方案1】:

    回答你的第一个问题

    ORM 是您的逻辑和数据之间的一个层,将一个映射到另一个。关系数据库通常不会以对象使用数据的方式存储数据,因此 ORM 旨在抽象出编写 SQL 以将数据从一种表示形式转换为另一种表示形式所需的心理体操。 (恕我直言,他们往往做得不好或效率不高)

    特别是对于 PyKE,one aspect 提供 SELECT 编译,但显然不提供 CRUDing(CRUD:创建、读取、更新、删除),这是 ORM 所做的最重要的事情。

    关于第二个问题

    当您可能需要知识引擎(例如自然语言数据搜索)时,可以使用 PyKE。那么PyKE可能知道如何以最有效的方式从数据库中提取数据来完成自己的目标。

    另一方面,ORM 将获得代表程序中某个对象的数据,例如来自网站的采购订单,它会在创建 PO 时插入该对象,然后将其从恢复会话时数据库,在用户向 PO 添加和删除项目时更改数据,并在购买完成或中止 (CRUD) 时删除 PO。


    tldr

    PyKE 是一个专门的库,它抽象出一些编写 SQL 以使用该库的需要,但不提供一套完整的数据库交互,因为它不是为此而构建的。

    ORM 确实提供了与 DB 的这种交互,并试图以一种非常动态的方式更容易地使用数据;虽然根据我的经验,使用/不使用 ORM 而不是手工制作的 SQL 引发了一些非常激烈的争论。

    【讨论】:

    • 但是......它能够编译 SELECT 语句,将它们发送到数据库等。如果给定适当的规则/计划,它是否也能够编译和运行完整 CRUD 的其他语句?或者,如果例如你只需要以只读方式使用数据库,所以你只需要 SELECT,为什么 ORM 更适合这项工作(如果可以的话)?
    • 所以,我想如果你设置得恰到好处,你可以让它做你想要的;但在我看来,您正在使用凿子作为螺丝刀。如果您的问题类似于 “我以某种方式使用这个库,我不能将它用于其他事情而不是导入另一个库” 那么......你可能可以,但我可能不会。
    猜你喜欢
    • 2010-11-26
    • 2017-07-08
    • 1970-01-01
    • 2023-03-03
    • 2014-03-16
    • 2018-03-05
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    相关资源
    最近更新 更多