用数据库查询的行填充类属性的最高效方法是什么?
想要通过数据库查询来设置一个类中的所有实例变量:
举个例子:
def populate(self, if):
#Perform mysql query
self._name = row['name']
self._email = row['email']
...
有没有什么最快的方法来做到这一点?或者这样做不太推荐吗?有没有更好的方法?
2 个回答
3
看看sqlalchemy,这是Python中最受欢迎的数据库抽象工具。
如果你特别喜欢“活动记录”这种模式,还有一个可以在它上面使用的工具,叫elixir。
我用sqlalchemy是因为它提供了很好的数据库抽象功能,让我可以轻松更换数据库。我在测试时使用内存中的sqlite,并且可以通过sqlalchemy把它整合到我的代码里。
4
手动这样做会让你的代码更容易读懂和预测。这样你就能很清楚地知道有哪些属性存在,哪些属性不存在。
你可以用
setattr
来自动化很多这些操作。一个比较好的方法是定义一个列表
attributes = ['name', 'email'...]
作为类的属性,然后这样做:for name in self.attributes: setattr(self, "_" + name, row[name])
你也可以直接从查询中获取属性,但这会根据你的查询而变化(特别是如果你使用
SELECT *
或类似的语句)以及你对数据库的更改。我注意到这些属性前面都有下划线。如果这只是内部使用的东西,考虑一下用属性而不是查询结果本身,或者存储一个字典,是否更符合你的需求。一般来说,属性应该是比较固定的东西。
我听说 oursql 比 MySQLdb 更好用。