我正在使用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是默认执行此操作还是每次追加后是否需要刷新?
答案 0 :(得分:5)
否:即使在您的简单情况下它可能会以这种方式工作,sqlalchemy也不会对插入顺序做出任何保证。
如果您真的需要rowids
按照要求全球进行订购,那么就没有简单的方式使其成为开箱即用的方式。
但是,如果您需要<{>> Ref
中Message
的排序,则可以通过向Ref
添加另一列来指示排序,在这种情况下使用Ordering List扩展是实现此目的的最简单方法。这将同时加载和插入保持排序的Ref
对象。