我是python和SQLAlchemy的新手。我在python 3
我创建了一个类testtbl
来处理表。其中一个功能是update
,我可以通过它:
myfilter = {'origin_source_id':'MX01’}.
在mysql
表的origin_source_id = ‘MX01'
表中找到该行
updatevalue = {'origin_source_id':'CAL01’}
将找到的origin_source_id替换为“ CAL01;
通话
testtbl.update_row(myfilter,updatevalue)
功能
def update_row(self,locaterowfilter,updatevalue):
self.Session.query( self.TableClass ).filter_by( **locaterowfilter ).update( updatevalue )
我收到以下错误
target_cls = query._mapper_zero().class_
AttributeError: 'NoneType' object has no attribute ‘class_’
我不知道该如何处理。
有更好的方法吗?
答案 0 :(得分:1)
该错误是由于将Table
对象作为查询的主要实体并尝试使用Query.update()
导致的:
In [26]: t = Table('t', metadata,
...: Column('a', Integer))
In [27]: session.query(t).update({'a': 1})
...
.../python3.6/site-packages/sqlalchemy/orm/persistence.py in _do_pre_synchronize(self)
1383 def _do_pre_synchronize(self):
1384 query = self.query
-> 1385 target_cls = query._mapper_zero().class_
1386
1387 try:
AttributeError: 'NoneType' object has no attribute 'class_'
,这意味着您的self.TableClass
不是mapped class。如果您希望在Table
上进行更新,请使用Core update()
构造:
stmt = self.TableClass.update().\
where(and_(*[self.TableClass.c[key] == value
for key, value in locaterowfilter.items()])).\
values(updatevalue)
self.Session.execute(stmt)