我正在使用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
查询也反过来显示顺序。这是什么原因以及如何保持订单与添加时相同?
答案 0 :(得分:1)
表格是设置行,因此除非您指定ORDER BY
,否则无法保证有任何订单。
在MySQL(InnoDB)中,主键充当聚簇索引。这意味着无论插入顺序如何,行都按主键指定的顺序进行物理存储,在本例中为(campaign_id, created_id)
。如果您没有指定ORDER BY
,则通常返回行的顺序。
如果您需要按特定顺序返回行,请在查询时指定ORDER BY
。