我有一个名为attributes的类变量,它列出了我想在数据库中更新的实例变量:
attributes = ['id', 'first_name', 'last_name', 'name', 'name_url',
'email', 'password', 'password_salt', 'picture_id']
每个类属性都会在实例化时更新。
我想循环遍历每个属性,并以以下形式构建MySQL更新查询:
UPDATE members SET id = self._id, first_name = self._first name ...
感谢。
答案 0 :(得分:3)
class Ic(object):
attributes = ['id', 'first_name', 'last_name', 'name', 'name_url',
'email', 'password', 'password_salt', 'picture_id']
def __init__(self): ...
# and other methods that set all the attributes on self
def updater(self):
sqlbase = 'UPDATE members SET %s WHERE whateveryouwanthere'
setpieces = []
values = []
for atr in self.attributes:
setpieces.append('%s = ?' % atr)
values.append(getattr(self, atr, None))
return sqlbase % ', '.join(setpieces), values
调用者需要适当地构建类Ic
的对象,然后执行
sql, values = theobj.updater()
最后调用mycursor.execute(sql, values)
它对数据库的任何数据库API游标都需要更新(我不知道你想用什么WHERE条件来识别要更新的特定记录,这就是为什么我在那里放了一个whatreveryouwanthere
占位符; - )。
答案 1 :(得分:0)
第一个问题:是否会使用属性中的所有变量?如果是这样,最简单的方法可能就是使用DBAPI的execute方法。
假设您的光标被实例化为csr:
sql="UPDATE mytable SET phone=? where username=?"
variables = ("a phone number","a username")
csr.execute(sql,variables)
还有其他方法可以实现,例如使用词典,位置指示器等。有关详细信息,请参阅DBAPI FAQ。