Сохраняет ли sqlalchemy порядок в отношениях «многие к одному / многие ко многим»? - PullRequest
6 голосов
/ 22 декабря 2011

Я использую sqlalchemy (с sqlite на данный момент, но это может измениться позже) для создания базы данных, в которой важен порядок вставок и, следовательно, rowids. У меня в основном есть следующее:

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, я бы хотел быть уверен, что при фиксации этого в базе данных Ref s будут вставлены в в том же порядке, в котором они появляются в списке. Sqlalchemy делает это по умолчанию или мне нужно очищать после каждого добавления?

1 Ответ

5 голосов
/ 22 декабря 2011

Нет : даже если в вашем простом случае это, вероятно, сработает, sqlalchemy не дает никаких гарантий относительно порядка вставки.


Если вам действительно нужно, чтобы rowids был глобально заказан в соответствии с запросом, простой способ заставить его работать "из коробки" не существует.

Однако, если вам нужно упорядочить Ref в пределах Message, то этого можно достичь, добавив еще один столбец к Ref для указания порядка, и в этом случае используйте Ordering List расширение - самый простой способ достичь этого. Это будет выполнять как загрузку, так и вставку Ref объектов, сохраняя порядок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...