Python 用数据库查询中的一行填充类属性的最有效方法是什么?
希望数据库查询设置类中的所有实例变量: 例如:Python 用数据库查询中的一行填充类属性的最有效方法是什么?,python,pylons,mysql,Python,Pylons,Mysql,希望数据库查询设置类中的所有实例变量: 例如: def populate(self, if): #Perform mysql query self._name = row['name'] self._email = row['email'] ... 最快的方法是什么?还是不建议(采用更好的方法)? 像这样手动操作,可以使您的代码最具可读性和可预测性。这样,您就可以准确地知道哪些属性存在,哪些属性不存在 您可以使用setattr来自动执行这些操作 一个相当好的方
def populate(self, if):
#Perform mysql query
self._name = row['name']
self._email = row['email']
...
最快的方法是什么?还是不建议(采用更好的方法)?- 像这样手动操作,可以使您的代码最具可读性和可预测性。这样,您就可以准确地知道哪些属性存在,哪些属性不存在
- 您可以使用
来自动执行这些操作 一个相当好的方法是将列表setattr
定义为类属性,然后执行以下操作attributes=['name','email'…]
您也可以从查询本身获取属性,但这将根据您的查询(特别是如果您使用for name in self.attributes: setattr(self, "_" + name, row[name])
或类似的方法)和您对数据库的更改而改变SELECT*
- 我注意到这些属性都有前导下划线。如果这是一个纯粹的内部问题,那么考虑一个属性而不是查询结果本身还是存储一个DICT并不能更好地满足您的需求。通常,属性应该是相当静态的东西
- 我听说我们的SQL比MySQLdb更好
如果你真的喜欢活动记录模式,有一层你可以放在上面,叫做
我使用sqlalchemy是因为它是一个很好的数据库抽象,允许我切换数据库。我在内存中使用sqlite进行测试,我可以使用sqlalchemy将其嵌入到代码中 谢谢,迈克。这很有帮助。关于查询结果本身的倒数第二点是什么意思?您的意思是设置一个“info”这样的实例变量,然后将整行设置为该值吗?row=db.getRow(query)self.\u info=row类似的东西?@ensnare,这正是我的意思。在这种情况下user.id和user.info.id之间出现差异会不会很奇怪?什么是更清洁的解决方案?谢谢你的帮助。你可能想也可能不想直接将所有其他内容设置为属性。如果你提出了一个新问题来解释你正在解决的问题,也许有人能帮助你确定你的课堂设计是最优的。谢谢你的回答。我曾经使用过sqlalchemy,但因为我对数据库的可移植性不感兴趣,所以对于我正在尝试做的事情来说,它似乎有点重。