我在Person
(作为作者)和Reference
(作为科学出版物之间创建了多对多关系)。
ReferenceAuthor = sa.Table('ReferenceAuthor', _Base.metadata,
sa.Column('ReferenceID', sa.Integer, sa.ForeignKey('Reference.ID'), primary_key=True),
sa.Column('PersonID', sa.Integer, sa.ForeignKey('Person.ID'), primary_key=True),
sa.Column('Index', sa.Integer)
)
class Reference(_Base):
__tablename__ = 'Reference'
_id = sa.Column('ID', sa.Integer, primary_key=True)
_authors = sao.relationship('Person', secondary=ReferenceAuthor)
class Person(_Base):
__tablename__ = 'Person'
_id = sa.Column('ID', sa.Integer, primary_key=True)
我希望Reference().authors
按ReferenceAuthor.Index
排序对象。
这里的三个表来自一个外来的sqlite3数据库。我无法更改该表的结构。我必须像他们一样对待他们。
我可以在order_by
中找到关于relationship()
的一些示例,但没有结合使用secondary=
。
我尝试了association_proxy
并阅读了有关该文档的文档。
class ReferenceAuthor(_Base):
__tablename__ = 'ReferenceAuthor'
_reference_id = sa.Column('ReferenceID', sa.Integer, sa.ForeignKey('Reference.ID'), primary_key=True)
_person_id = sa.Column('PersonID', sa.Integer, sa.ForeignKey('Person.ID'), primary_key=True)
_index = sa.Column('Index', sa.Integer)
_person = sao.relationship('Person')
class Reference(_Base):
__tablename__ = 'Reference'
_id = sa.Column('ID', sa.Integer, primary_key=True)
_authors = saa.association_proxy('ReferenceAuthor', 'Person')
当我阅读文档时,我想我理解它背后的概念。但是使用我的代码它没有用,我不明白为什么。错误是
sqlalchemy.exc.InvalidRequestError: Mapper 'Mapper|Reference|Reference' has no property 'ReferenceAuthor'
。
答案 0 :(得分:0)
解决方案1:
取决于@univerio的好评论答案:
_authors = sao.relationship('Person',
secondary=ReferenceAuthor,
order_by=ReferenceAuthor.c.Index)
解决方案2:
从sqla-mailinglist获得此提示。取决于我最初问题中的第一个代码:
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/grid_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="auto_fit"
android:columnWidth="90dp"
android:horizontalSpacing="10dp"
android:verticalSpacing="10dp"
android:gravity="center"
android:stretchMode="columnWidth" >
</GridView>
这看起来很简单。
附带问题:这两种解决方案有什么区别?