2011-12-22 3 views
4

저는 sqlalchemy (지금은 sqlite를 사용하고 있지만 나중에 변경 될 수 있습니다)를 사용하여 삽입 및 따라서 ROWID 순서가 중요한 데이터베이스를 작성합니다. 나는 Message 객체를 생성sqlalchemy는 다 대일/다 대 다 관계에서 순서를 유지합니까?

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')) 

appendmessage.refsRef 객체, 나는 데이터베이스에이 커밋 할 때 Ref의이 삽입됩니다 있는지 확인하고 싶습니다 : 나는 기본적으로 다음과 같은이 목록에 나타나는 순서와 동일합니다. sqlalchemy가 기본적으로이 작업을 수행합니까? 아니면 추가 할 때마다 플러시해야합니까?

답변

3

아니요 : 간단한 방법으로도이 방법으로 작동한다고해도 sqlalchemy은 삽입 순서에 대해 어떠한 보증도하지 않습니다.


당신이 정말로 rowids 필요한 경우

세계적으로 요청으로 주문, 그것은 아웃 - 오브 - 박스를 작동 만드는 더 간단한 방법이 없습니다 수 있습니다. 당신이 필요로하는 것은 MessageRef주문 인 경우

그러나, 다음이 경우 가장 쉬운 방법을 Ordering List 확장되어 사용이를 달성하기 위해, 순서를 나타내는 Ref 또 다른 열을 추가함으로써 달성 될 수있다 . 이렇게하면 주문을 유지하면서 Ref 개체를로드하고 삽입 할 수 있습니다.

+2

오른쪽. My 5 ¢ : many-to-many의 경우, 주문 필드, 관계 및 연관 프록시를 사용하여 이러한 구현 세부 사항을 숨기는 중간 모델이 필요합니다. –

+0

감사 밴, 그게 내가 뭘 원하는지 완벽하게 보이네요 :) – Asterism

관련 문제