对于这种情况,假设有一个表以声明性基础声明为Game,该表的列名为“ espn_game_id”和“ a_name”。在变量“ s”下有一个打开的会话对象。所以这有效:
s.add(Game(espn_game_id=888, a_name='lol'))
s.commit()
这将失败:
n = {"espn_game_id": 888, "a_name": 'lol'}
s.add(Game(n))
s.commit()
这可以工作(假设已经有一个带有espn_game_id == 888的条目):
n = {"a_name": 'lol'}
s.query(Game).filter(Game.espn_game_id==888).update(n)
s.commit()
为什么第二种情况失败,有没有办法让这种语法在这里工作?
尝试更换:
s.add(Game(n))
和:
s.add(Game(**n))
假设您具有如下功能:
def foo(**kwargs):
print [item for item in kwargs.items()]
它期望关键字不是位置参数,因此可以正常工作:
foo(**{'foo': 1, 'bar': 2})
这将失败:
foo({'foo': 1, 'bar': 2})
为了获得更好的解释,您应该阅读* args和** kwargs?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句