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