2015-02-22 5 views
1

Рассмотрим следующую структуру базы данных:Создать псевдоним, ссылающихся на части таблицы

from gluon import DAL, Field 

db = DAL('sqlite:memory:') 

db.define_table('party', 
    Field('place') 
) 

db.define_table('participant', 
    Field('party_id', 'reference party'), 
    Field('name'), 
    Field('role') 
)  

db.party.insert(place="Jane's home") 

db.participant.insert(name='Jane',party_id=1,role='host') 
db.participant.insert(name='George',party_id=1,role='organizer') 
db.participant.insert(name='John',party_id=1,role='guest') 
db.participant.insert(name='Mary',party_id=1,role='guest') 

Сейчас. Я хотел бы сделать выбор, когда я выбираю каждую вечеринку с ее хостом и организатором.

я могу сделать это так:

host = db.participant.with_alias('host') 
organizer = db.participant.with_alias('organizer') 

rows = db().select(
     db.party.place, 
     host.name, 
     organizer.name, 
    left=(
     host.on((host.party_id==db.party.id) & (host.role=='host')), 
     organizer.on((organizer.party_id==db.party.id) & (organizer.role=='organizer')) 
    ) 
) 

for row in rows: 
    print [row.party.place, row.host.name, row.organizer.name] 

Но я думаю, что это не самый лучший способ. В частности, это предложение:

& (host.role=='host') 

Звучит довольно нелепо. Кроме того, возможно, в следующий раз мне придется выбирать все хосты. Тогда я должен включать в себя вышеупомянутое условие всюду.

Есть ли способ определить псевдоним хоста, чтобы я мог получить только тех, кто является хозяевами?

Я ищу какое-то решение, как:

create view host as select * from participant where role = 'host' 

также любые другие идеи, чтобы сделать последний выбор похорошела приветствуются!

+0

Кто-нибудь? Имеет ли мой вопрос смысл? – Pekka

ответ

1

Я просто смотрю через pydoc gluon.DAL и я обнаружил, что вы можете сделать это:

db.executesql("CREATE VIEW host AS SELECT * FROM participant WHERE role = 'host'") 
+0

Привет, спасибо, но как я должен использовать этот вид для своих запросов? Кажется, что это работает, если я просто скопирую определение таблицы участников и заменим слово участника хостом. Я искал способ сделать это в python вместо перехода на уровень базы данных. И «если не существует» также необходимо указать. – Pekka

+0

@Pekka. Вы, как правило, должны использовать его, как хотите, единственная причина, по которой я дал вам эту конкретную команду sql, - это то, о чем вы спрашивали в своем вопросе. Кроме того, это очень pythonic, потому что, как говорится, *** просто лучше, чем сложный *** – randomusername

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