sqlalchemy.exc.InvalidRequestError:预期的SQL表达式,列或映射实体

时间:2012-02-22 19:53:18

标签: python sql orm sqlalchemy

我遇到了这个我无法理解的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 ) }
    )

2 个答案:

答案 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()函数创建基类

当然,这对我的情况有帮助

我希望这是有用的。

更多信息: https://docs.sqlalchemy.org/en/13/orm/tutorial.html

答案 1 :(得分:-5)

尝试filter_by(pk = pk)而不是