2013-12-12 3 views
1

У меня есть определение таблицы, как следующее web2py:Excuding поля идентификатора из выбранного запроса

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' и другими полями, которые я добавил в списке.

SQL, выполняется web2py является:

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

, которая дает правильный вывод.

Как я могу исключить это постороннее поле 'id' или, по крайней мере, удалить его с выхода?

+0

Спасибо за оба ответа. Я исправляю проблему с базой данных. – navanitachora

+0

Я исправлю проблему с базой данных, используя ответ @ anthony. – navanitachora

ответ

0

Если вы объявляете поле типа «id», вам также не следует использовать аргумент «primarykey». Аргумент «primarykey» используется только в том случае, если в таблице нет целочисленного поля с автоматическим приращением, которое служит в качестве первичного ключа.

0

Я думаю, что web2py автоматически добавит поле id к каждому запросу/таблице.

Что вы можете сделать, либо установить это поле None но не удалит его

for result in results: 
    result.id = None 

Или превратить results как dictionnary и удалить id ключ

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

Надеется, что это помогает и хочет узнать, есть ли лучший ответ :)

EDIT: Согласно web2py docume ntation ...

Не объявляйте поле под названием «id», потому что оно создано web2py. По умолчанию каждая таблица имеет поле «id». Это целочисленное поле с автоматическим приращением (начиная с 1), используемое для перекрестной ссылки, и для того, чтобы сделать каждую запись уникальной, поэтому «id» является первичным ключом. (Примечание: начальный идентификатор id равен 1. Например, это не относится к движку Google App Engine NoSQL.)

Возможно, вы можете определить поле типа = 'id', и web2py будет использовать это поле в качестве поля auto-increment id. Это не рекомендуется, за исключением случаев доступа к старым таблицам базы данных. С некоторыми ограничениями вы также можете использовать разные первичные ключи, и это обсуждается в разделе «Устаревшие базы данных и таблицы с ключами».

Смежные вопросы