这是避免使用SQLAlchemy/SQLObject的好方法吗?

3 投票
3 回答
596 浏览
提问于 2025-04-15 13:49

我在考虑在Python和MySQL中使用一种不依赖ORM(对象关系映射)的方式,而不是使用ORM(像SQLObject或SQLAlchemy)。我想听听大家的意见,看看这种方法在长期使用中是否可能会有负面影响,因为从短期来看,我觉得这似乎没什么问题。

具体来说,我不打算把数据库中的一行数据转换成一个对象,而是:

  • 每个表用一个类来表示
  • 从数据库中取出一行数据时,返回的是一个字典
  • 一个表示游标的对象可以像这样访问表:

    cursor.mytable.get_by_ids(low, high)

  • 删除数据时,只需把删除时间设置为当前时间

所以,这样做就不需要ORM了,因为每个表都有一个类来表示,而在这个类里面,每一行数据用一个单独的字典来表示。

类型映射很简单,因为每个字典(行)在Python中都是一个一等公民,这样你就可以知道对象的类。而且,Python中的低级数据库库会处理字段级别的类型转换,把它们转换成合适的应用层类型。

如果你觉得这种做法可能会有问题,请告诉我。谢谢。

3 个回答

0

web.py 也有一个不错的数据库抽象层(不是ORM)。

查询是用 SQL 语言写的(这不是针对任何特定的关系型数据库管理系统),但你的代码可以兼容所有支持的数据库(比如 sqlite、mysql、postgresql 等等)。

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

myvar = dict(name="Bob")
results = db.select('mytable', myvar, where="name = $name")
2

你还是会用到SQLAlchemy。其实,当你使用.fetchmany()或者类似的方法时,ResultProxy实际上就像一个字典。

把SQLAlchemy当作一个工具,它能让你更方便地管理连接和执行语句。文档的内容分成了几个部分,所以你只需要阅读你需要的那一部分就可以了。

8

这并不意味着你就不需要一个ORM(对象关系映射)。其实,这就是一个ORM。那么,为什么要重新发明轮子呢?

你有没有什么特别的理由想要避免使用一个已经成熟的ORM呢?

撰写回答