2015-07-30 5 views
2

Я использую библиотеку Peewee в Python, и я хочу проверить, существует ли запрос. Я не хочу создавать запись, если она не существует, поэтому я не хочу использовать get_or_create. Должно быть лучшее решение, чем использовать try/except с get, но я ничего не вижу. Пожалуйста, дайте мне знать, если есть лучший способ. Благодарю.проверить, существует ли запрос с использованием peewee

+0

Есть ли что-то не так с попыткой/исключением подхода? – taesu

+0

Не кажется очень изящным. – calthoff

ответ

2

В качестве альтернативы, если вы хотите, чтобы проверить, например, другая таблица ссылается на эту запись, вы можете использовать предложение WHERE EXISTS (subquery). Она не поддерживается изначально на Peewee, но она может быть легко построены:

subquery = Child.select(Param('1')).where(Child.parent == Parent.id) 
parents_with_children = Parent.select().where(
    Clause(SQL('EXISTS'), subquery)) 

Это эквивалентно следующему SQL:

SELECT * FROM parent 
WHERE EXISTS (SELECT 1 FROM child 
       WHERE child.parent_id = parent.id); 

Здесь я использовал SELECT 1 для подзапроса, чтобы избежать извлечения ненужной информации (например, child.id). Не уверен, что такая оптимизация действительно необходима.

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