这是避免使用SQLAlchemy/SQLObject的好方法吗?
我在考虑在Python和MySQL中使用一种不依赖ORM(对象关系映射)的方式,而不是使用ORM(像SQLObject或SQLAlchemy)。我想听听大家的意见,看看这种方法在长期使用中是否可能会有负面影响,因为从短期来看,我觉得这似乎没什么问题。
具体来说,我不打算把数据库中的一行数据转换成一个对象,而是:
- 每个表用一个类来表示
- 从数据库中取出一行数据时,返回的是一个字典
一个表示游标的对象可以像这样访问表:
cursor.mytable.get_by_ids(low, high)
删除数据时,只需把删除时间设置为当前时间
所以,这样做就不需要ORM了,因为每个表都有一个类来表示,而在这个类里面,每一行数据用一个单独的字典来表示。
类型映射很简单,因为每个字典(行)在Python中都是一个一等公民,这样你就可以知道对象的类。而且,Python中的低级数据库库会处理字段级别的类型转换,把它们转换成合适的应用层类型。
如果你觉得这种做法可能会有问题,请告诉我。谢谢。
3 个回答
web.py 也有一个不错的数据库抽象层(不是ORM)。
查询是用 SQL 语言写的(这不是针对任何特定的关系型数据库管理系统),但你的代码可以兼容所有支持的数据库(比如 sqlite、mysql、postgresql 等等)。
来自 http://webpy.org/cookbook/select:
myvar = dict(name="Bob")
results = db.select('mytable', myvar, where="name = $name")
你还是会用到SQLAlchemy。其实,当你使用.fetchmany()或者类似的方法时,ResultProxy实际上就像一个字典。
把SQLAlchemy当作一个工具,它能让你更方便地管理连接和执行语句。文档的内容分成了几个部分,所以你只需要阅读你需要的那一部分就可以了。
这并不意味着你就不需要一个ORM(对象关系映射)。其实,这就是一个ORM。那么,为什么要重新发明轮子呢?
你有没有什么特别的理由想要避免使用一个已经成熟的ORM呢?