我遇到了这个我无法理解的sqlachemy错误:
sqlalchemy.exc.InvalidRequestError: SQL expression, column, or mapped entity expected - got '<class '__main__.JobRecord'>'
这个错误是什么意思?可能的原因是什么?
这是触发错误的方法:
@classmethod
def find_job_record_from_pk(cls, pk):
'''
return the job record with the given pk
'''
job_record = MlcDb.get_session().query(cls).filter(cls.pk == pk).first()
return job_record
映射:
@classmethod
def define_mapping(cls):
'''
SQLAlchemy mapping definition
'''
cls.mapper = mapper(cls, cls.table,
polymorphic_on = cls.table.c.item_type,
properties = {
'item_type': synonym('_JobRecord__item_type', map_column=True),
'version': synonym('_JobRecord__version', map_column=True),
'state': synonym('_JobRecord__state', map_column=True),
'date_created' : synonym( '_JobRecord__date_created', map_column=True ) }
)
答案 0 :(得分:0)
在我的情况下,发生错误是因为我忘记从定义类的“ Base”扩展。 根据给定的错误,很可能它被声明为 如下:
JobRecord:
pro1: Column()
代替
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
JobRecord(Base): #here is the missing extend
pro1: Column()
消息说“该参数无法识别。
根据文档
使用声明性系统映射的类是根据基类定义的,该基类维护相对于该基类的类和表的目录-这称为声明性基类
重要的是要注意:
在通常导入的模块中,我们的应用程序通常仅具有该基础的一个实例。我们使用declarative_base()函数创建基类
当然,这对我的情况有帮助
我希望这是有用的。
答案 1 :(得分:-5)
尝试filter_by(pk = pk)
而不是