sqlalchemy是否在多对一/多对多关系中保持秩序?

sqlalchemy是否在多对一/多对多关系中保持秩序?,sqlalchemy,Sqlalchemy,我正在使用sqlalchemy(目前使用sqlite,但以后可能会更改)来构建一个数据库,其中插入顺序和rowid非常重要。我基本上有以下几点: class Message(Base): __tablename__ = 'messages' __table_args__ = {'sqlite_autoincrement':True} id = Column(Integer, primary_key=True) refs = relationship('Ref')

我正在使用sqlalchemy(目前使用sqlite,但以后可能会更改)来构建一个数据库,其中插入顺序和rowid非常重要。我基本上有以下几点:

class Message(Base):
    __tablename__ = 'messages'
    __table_args__ = {'sqlite_autoincrement':True}
    id = Column(Integer, primary_key=True)
    refs = relationship('Ref')

class Ref(Base):
    __tablename__ = 'refs'
    __table_args__ = {'sqlite_autoincrement':True}
    id = Column(Integer, primary_key=True)
    message_id = Column(Integer, ForeignKey('messages.id'))

当我创建一个
Message
对象并将
Ref
对象添加到
Message.refs
时,我希望确保当我将其提交到数据库时,
Ref
将以它们在列表中出现的相同顺序插入。sqlalchemy在默认情况下是这样做的,还是每次追加后我都需要刷新?

否:即使在您的简单情况下,它可能会以这种方式工作,也不能保证插入顺序


如果您确实需要按照请求对
rowids
进行全局排序,那么没有简单的方法可以让它开箱即用


但是,如果您需要对
消息中的
Ref
进行排序,则可以通过在
Ref
中添加另一列来表示排序,在这种情况下,使用扩展名是实现这一点的最简单方法。这将加载和插入
Ref
对象,保持有序。

正确。My 5​:对于多对多,您需要一个中间模型,带有排序字段、与它的关系和关联代理来隐藏这些实现细节。谢谢van,这看起来非常适合我的需要:)