sqlalchemy:查询结果的顺序意外

时间:2016-02-29 06:18:32

标签: python mysql sqlalchemy

我正在使用SQLAlchemy和MySQL,并且有一个包含两个外键的表:

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 个答案:

答案 0 :(得分:1)

表格是设置行,因此除非您指定ORDER BY,否则无法保证有任何订单。

在MySQL(InnoDB)中,主键充当聚簇索引。这意味着无论插入顺序如何,行都按主键指定的顺序进行物理存储,在本例中为(campaign_id, created_id)。如果您没有指定ORDER BY,则通常返回行的顺序。

如果您需要按特定顺序返回行,请在查询时指定ORDER BY