2016-02-29 55 views
1

我使用SQLAlchemy的與MySQL和有兩個外鍵的表:SQLAlchemy的:查詢結果意想不到的順序

class CampaignCreativeLink(db.Model): 
    __tablename__ = 'campaign_creative_links' 
    campaign_id = db.Column(db.Integer, db.ForeignKey('campaigns.id'), 
    primary_key=True) 
    creative_id = db.Column(db.Integer, db.ForeignKey('creatives.id'), 
    primary_key=True) 

然後我用一個for循環中插入3個項目進入這樣的表:

session.add(8, 3) 
session.add(8, 2) 
session.add(8, 1) 

但是當我檢查表中,項目被責令反向

8 1 
8 2 
8 3 

和查詢顯示訂單逆向工程&也是如此。這是什麼原因以及如何保持順序與添加時相同?

回答

1

表格是集合的行,因此不保證有任何順序,除非您指定ORDER BY

在MySQL(InnoDB)中,主鍵充當聚簇索引。這意味着無論插入的順序如何,這些行都按照主鍵指定的順序(在本例中爲(campaign_id, created_id))進行物理存儲。如果您未指定ORDER BY,則這是通常是行返回的順序。

如果您需要以特定順序返回行,請在查詢時指定ORDER BY

+0

它有助於在此表中添加「id」字段嗎? – lang2

+0

@ lang2是的,我認爲這是有效的,如果你有一個自動遞增的非主鍵列,並總是排序。 – univerio

+0

我曾嘗試添加'id'字段,但是'Field'id'沒有默認值'錯誤消息。 – lang2