sqlalchemy是否保持多对多/多对多关系中的顺序?

时间:2011-12-22 07:41:59

标签: sqlalchemy

我正在使用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对象和append Ref对象message.refs时,我想确定当我将其提交到数据库时{ {1}}将按照它们在列表中出现的顺序插入。 sqlalchemy是默认执行此操作还是每次追加后是否需要刷新?

1 个答案:

答案 0 :(得分:5)

:即使在您的简单情况下它可能会以这种方式工作,sqlalchemy也不会对插入顺序做出任何保证。


如果您真的需要rowids按照要求全球进行订购,那么就没有简单的方式使其成为开箱即用的方式。

但是,如果您需要<{>> RefMessage的排序,则可以通过向Ref添加另一列来指示排序,在这种情况下使用Ordering List扩展是实现此目的的最简单方法。这将同时加载和插入保持排序的Ref对象。