用数据库查询的行填充类属性的最高效方法是什么?

2 投票
2 回答
1858 浏览
提问于 2025-04-15 21:01

想要通过数据库查询来设置一个类中的所有实例变量:

举个例子:

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 更好用。

撰写回答