从select查询中排除id字段

时间:2013-12-12 01:12:17

标签: python mysql sql web2py

我在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'字段,或者至少将其从输出中删除?

2 个答案:

答案 0 :(得分:0)

我认为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字段。除了访问旧数据库表外,不建议这样做。由于某些限制,您还可以使用不同的主键,这将在“旧数据库和键控表”一节中讨论。

答案 1 :(得分:0)

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