3

我没有使用 ORM,而是考虑在没有 ORM(SQLObject/SQLAlchemy)的 Python 和 MySQL 中使用以下方法。我想就这是否可能产生任何负面的长期后果得到一些反馈,因为从短期来看,据我所知,这似乎很好。

而不是将数据库中的一行转换为对象:

  • 每个表都由一个类表示
  • 将一行作为字典检索
  • 表示游标的对象提供对表的访问,如下所示:

    cursor.mytable.get_by_ids(低,高)

  • 移除意味着将 time_of_removal 设置为当前时间

所以基本上这消除了对 ORM 的需要,因为每个表都有一个类来表示它,并且在该类中,一个单独的 dict 表示每一行。

类型映射很简单,因为作为 python/blub 中的第一类对象的每个 dict(行)允许您知道对象的类,此外,Python 中的低级数据库库处理字段级别的类型转换为它们相应的应用程序级别类型。

如果您在这条路上发现任何潜在的问题,请告诉我。谢谢。

4

3 回答 3

8

这并不能消除对 ORM 的需求。那一个ORM。在这种情况下,为什么要重新发明轮子?

您是否有令人信服的理由试图避免使用已建立的 ORM?

于 2009-08-23T21:23:54.127 回答
2

您仍将使用 SQLAlchemy。一旦你使用 .fetchmany() 或类似的,ResultProxy 实际上就是一本字典。

使用 SQLAlchemy 作为一种工具,可以更轻松地管理连接以及执行语句。文档在各个部分中几乎是分开的,因此您将只阅读您需要的部分。

于 2009-08-23T21:48:45.717 回答
0

web.py 也有一个不错的数据库抽象(不是 ORM)。查询是用 SQL 编写的(不特定于任何 rdbms),但您的代码仍然与任何受支持的 dbs(sqlite、mysql、postresql 等)兼容。

来自http://webpy.org/cookbook/select

myvar = dict(name="Bob")
results = db.select('mytable', myvar, where="name = $name")
于 2009-08-23T21:55:10.790 回答