问题描述
|
我正在将Flask框架与sqlalchemy结合使用,但无法查询结果的某些相关表。
用户>有很多>订单
所以我有订单,我想查询该订单所属的用户。
order = Order.query.get( id )
return order.user()
当我调用它时,我得到\'User \'对象是不可调用的。这是定义我的关系的方式:
# ----------------------------------------------------------------------------------
# MODELS
# ----------------------------------------------------------------------------------
class User( object ):
__tablename__ = \'user\'
query = db_session.query_property()
class Order( object ):
__tablename__ = \'order\'
query = db_session.query_property()
# ----------------------------------------------------------------------------------
# MODELS SCHEMA
# ----------------------------------------------------------------------------------
users_table = Table( \'user\',Metadata,Column( \'id\',Integer,primary_key = True ),Column( \'username\',String( 50 ),unique = True ),Column( \'email\',Column( \'password\',String( 32 ),nullable = False ),...
MysqL_engine = \'InnoDB\',MysqL_charset = \'utf8\'
)
orders_table = Table( \'order\',Column( \'user_id\',ForeignKey( \'user.id\' ) ),Column( \'transaction_id\',MysqL_charset = \'utf8\'
)
# ----------------------------------------------------------------------------------
# MAPPERS
# ----------------------------------------------------------------------------------
mapper( User,users_table,properties = {
# has many
\'orders\' : relationship( Order )
} )
mapper( Order,orders_table,properties = {
# belongs to
\'user\': relationship( User )
} )
知道为什么会出现此错误吗?
解决方法
order
是订单对象,您已将\“ user \”关系定义为属性。因此,属性\“ user \”将代表用户对象。这可能与您使用过的其他ORM不同,其中ѭ3实际上是一些需要调用以检索用户的函数,或者是可能返回用户的查询对象。
如果您希望看到此效果,请执行以下操作...
user = order.user
print type(user)
您会注意到order.user
返回一个\“ User \”实例(或者在某些情况下可能返回ѭ6an或引发异常)。在这种情况下,调用order.user()
将尝试“调用”User
实例。
因此,该错误消息很有意义,因为您正试图调用User
实例,并且尚未将User
定义为可调用对象。