【问题标题】:Excuding the id field from the select query从选择查询中排除 id 字段
【发布时间】:2013-12-12 01:12:17
【问题描述】:

我在 web2py 中有如下表定义:

 my_table = db.define_table('my_table',
    Field('mt_table_id', 'id', requires=[IS_NOT_EMPTY()]),
    Field('field_one', 'string', length=256, requires=[IS_NOT_EMPTY()]),
    Field('field_two', 'string', length=256, requires=[IS_NOT_EMPTY()]),
    Field('field_three', 'string', length=256, requires=[IS_NOT_EMPTY()]),
    primarykey=['my_table_id'])

问题是如果我执行查询:

results = db().select(db.my_table.my_table_id, db.my_table.field_one, db.my_table.field_two, db.my_table.field_three).as_list()

我得到一个名为 'id' 的额外字段以及 'my_table_id' 字段以及我在选择中添加的其他字段。

web2py执行的SQL是:

SELECT my_table.my_table_id, my_table.field_one, my_table.field_two, my_table.field_three FROM my_table;

给出正确的输出。

如何排除这个无关的 'id' 字段或至少将其从输出中删除?

【问题讨论】:

  • 感谢您的两个回答。我正在纠正数据库的问题。
  • 我正在使用@anthony 的回答纠正数据库的问题。

标签: python mysql sql web2py


【解决方案1】:

如果您要声明“id”类型的字段,则不应同时使用“primarykey”参数。仅当表没有用作主键的自增整数字段时才使用“primarykey”参数。

【讨论】:

    【解决方案2】:

    我认为 web2py 会自动为每个查询/表添加一个 id 字段。

    您可以将此字段设置为None,但不会将其删除

    for result in results:
        result.id = None
    

    或将results 转换为字典并删除id

    results = results.as_dict()
    for result in results
        result.pop("id", None)
    

    希望它有所帮助,并渴望知道是否有更好的答案:)

    编辑: 根据 web2py 文档...

    不要声明名为“id”的字段,因为无论如何都是由 web2py 创建的。默认情况下,每个表都有一个名为“id”的字段。它是一个自增整数字段(从 1 开始),用于交叉引用和使每条记录唯一,因此“id”是主键。 (注意:从 1 开始的 id 是特定于后端的。例如,这不适用于 Google App Engine NoSQL。)

    您可以选择定义 type='id' 的字段,web2py 将使用该字段作为自动增量 id 字段。除非访问旧数据库表,否则不建议这样做。在某些限制下,您还可以使用不同的主键,这将在“遗留数据库和键控表”一节中讨论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      • 2014-12-07
      • 2019-05-09
      • 2014-03-05
      • 1970-01-01
      相关资源
      最近更新 更多