我正在使用带有sqlalchemy的Flask框架,我无法查询结果的某些相关表。
用户>有很多>订单
所以我有订单,我想查询订单所属的用户。
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', String( 50 ), unique = True ),
Column( 'password', String( 32 ), nullable = False ),
...
mysql_engine = 'InnoDB',
mysql_charset = 'utf8'
)
orders_table = Table( 'order', metadata,
Column( 'id', Integer, primary_key = True ),
Column( 'user_id', Integer, ForeignKey( 'user.id' ) ),
Column( 'transaction_id', String( 32 ), unique = True ),
...
mysql_engine = 'InnoDB',
mysql_charset = 'utf8'
)
# ----------------------------------------------------------------------------------
# MAPPERS
# ----------------------------------------------------------------------------------
mapper( User, users_table, properties = {
# has many
'orders' : relationship( Order )
} )
mapper( Order, orders_table, properties = {
# belongs to
'user': relationship( User )
} )
知道这个错误的原因吗?
答案 0 :(得分:3)
order
是订单对象,您已将“用户”关系定义为属性。因此,属性“user”将表示用户对象。这可能与您使用的其他ORM不同,其中order.user
实际上是需要调用以检索用户的某个函数,或者可能是返回用户的查询对象。
如果你想看到这一点,请执行以下操作......
user = order.user
print type(user)
您会注意到order.user
返回“用户”实例(或者在某些情况下可能会返回None
或引发异常)。在这种情况下,调用order.user()
将尝试“调用”User
实例。
错误消息因此有意义,因为您尝试调用User
实例,而User
尚未定义为callable对象。