【发布时间】:2012-04-09 08:35:57
【问题描述】:
型号
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, ForeignKey
from sqlalchemy import Integer
from sqlalchemy import Unicode
from sqlalchemy import TIMESTAMP
from sqlalchemy.orm import relationship
BaseModel = declarative_base()
class Base(BaseModel):
__tablename__ = 'base'
id = Column(Integer, primary_key=True)
location = Column(Unicode(12), ForeignKey("locationterrain.location"), unique=True,)
name = Column(Unicode(45))
ownerid = Column(Integer,ForeignKey("player.id"))
occupierid = Column(Integer, ForeignKey("player.id"))
submitid = Column(Integer,ForeignKey("player.id"))
updateid = Column(Integer,ForeignKey("player.id"))
owner = relationship("Player",
primaryjoin='Base.ownerid==Player.id',
join_depth=3,
lazy='joined')
occupier= relationship("Player",
primaryjoin='Base.occupierid==Player.id',
join_depth=3,
lazy='joined')
submitter = relationship("Player",
primaryjoin='Base.submitid== Player.id',
join_depth=3,
lazy='joined')
updater= relationship("Player",
primaryjoin='Base.updateid== Player.id',
join_depth=3,
lazy='joined')
class Player(BaseModel):
__tablename__ = 'player'
id = Column(Integer, ForeignKey("guildmember.playerid"), primary_key=True)
name = Column(Unicode(45))
搜索
bases = dbsession.query(Base)
bases = bases.order_by(Base.owner.name)
这不起作用....我到处搜索并阅读了文档。 但我只是不知道如何根据他们的“所有者”关系的名称对我的(基本)查询进行排序。
它总是会导致:
AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object has an attribute 'name'
这一定很容易……但我看不出来。还研究了比较器,这似乎是合乎逻辑的,但我看不到 ORDER BY 的查询部分是在哪里生成的,或者我应该返回什么,因为一切都是动态生成的。并且为我的每个“玩家”关系做一个比较器来做一件简单的事情似乎过于复杂。
【问题讨论】:
标签: python sqlalchemy sql-order-by field relationship