【问题标题】:sqlalchemy: order of query result unexpectedsqlalchemy:查询结果的顺序意外
【发布时间】:2016-02-29 06:18:31
【问题描述】:

我在 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

查询也显示顺序相反。这是什么原因?如何才能保持添加时的顺序?

【问题讨论】:

    标签: python mysql sqlalchemy


    【解决方案1】:

    表格是一组行,因此不保证有任何顺序,除非您指定ORDER BY

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

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

    【讨论】:

    • 在此表中添加id 字段是否有帮助?
    • @lang2 是的,如果您有一个自动递增的非主键列并始终对其进行排序,我认为这是可行的。
    • 我确实尝试添加和id 字段,但之后收到Field 'id' doesn't have a default value 错误消息。
    • @lang2 您是否在id 列上指定了AUTO_INCREMENT
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 2019-05-04
    • 1970-01-01
    • 2023-03-05
    • 2010-11-25
    • 2012-01-02
    相关资源
    最近更新 更多