Mam klasę Item
, której id
jest kluczem podstawowym i generowane automatycznie. Teraz czytam dane z innego zewnętrznego źródła, tworzę obiekt Item
i muszę sprawdzić, czy ten obiekt jest już obecny w mojej tabeli items
. Jak mam to zrobić?SQLAlchemy: Sprawdź, czy obiekt jest już obecny w tabeli
Odpowiedz
Można wyszukiwać produkty o tych samych atrybutach i sprawdzać, czy liczba jest większa od zera.
if session.query(Item.id).filter(Item.email==newItem.email,
Item.type==newItem.type).count() > 0:
// item exists
'> 0' jest nadmiarowe, ponieważ count() zwraca zero, jeśli nie znaleziono żadnych dopasowań, a dodatnia liczba całkowita w przeciwnym przypadku. – kalu
@kalu: "Jawny jest lepszy niż niejawny." - The Zen of Python –
Używanie count sprawia, że baza danych wykonuje więcej pracy niż potrzebuje. Zobacz moją odpowiedź poniżej dla skutecznej metody. – Salami
można spróbować coś podobnego do tego:
from sqlalchemy import exc
try:
session.add(item)
session.commit()
except exc.IntegrityError:
session.rollback()
print 'This item fails one of the unique/foreign key checks!'
except:
print 'There was another error'
raise
else:
print 'Everything is OK'
to ma problem, że działa ona na popełnienie, a następnie wycofuje ...
inną opcją, jeśli można sprawdzić właściwości pojedynczo, to może działać:
session.query(Item).filter_by(x=item.x, y=item.y).count() == 0
Najbardziej efektywnym sposobem jest użycie exists()
q = session.query(Item.id).filter(Item.email==email)
session.query(q.exists()).scalar() # returns True or False
- 1. Sprawdź, czy element jest obecny.
- 2. Sprawdź, czy obiekt jest pusty
- 3. Flask-SQLAlchemy InvalidRequestError: Obiekt jest już dołączony do sesji
- 4. Sprawdź, czy {{ścieżka()}} jest obecny {{ścieżka()}} w Symfony2
- 5. Lalka - sprawdź, czy pakiet jest już zdefiniowany?
- 6. Sprawdź, czy stała jest już zdefiniowana
- 7. Sprawdź, czy atrybut HTML jest obecny i uzyskaj wartość
- 8. Sprawdź, czy jest to obiekt okno
- 9. Sprawdź, czy obiekt jest kolekcją ogólną.
- 10. Sprawdź, czy obiekt jest obiektem jQuery.
- 11. Mongoose: sprawdź, czy obiekt jest obiektem mongoose
- 12. VBA sprawdź, czy obiekt jest ustawiony
- 13. Python - sprawdź, czy obiekt jest wbudowaną funkcją
- 14. BigQuery - Sprawdź, czy tabela już istnieje
- 15. C# Ustal, czy obiekt jest obecny na obrazku:
- 16. Sprawdź, czy zdarzenie już istnieje
- 17. Sprawdź, czy obiekt implementuje interfejs
- 18. Sprawdź, czy plik jest już w źródłowej kontroli
- 19. W Railsach 4.2 sprawdź, czy zadanie jest już zakolejkowane
- 20. Sprawdź, czy obiekt implementuje interfejs
- 21. Czy mogę sprawdzić obiekt zapytań sqlalchemy, aby znaleźć już połączone tabele?
- 22. Django sprawdź, czy obiekt w polu ManyToMany
- 23. Sprawdź, czy obiekt jest listą list w pythonie?
- 24. Sprawdź, czy obiekt jest pustym obiektem w szablonie AngularJS
- 25. Jak sprawdzić, czy obiekt jest obecny w scenie czy nie w THREE.js?
- 26. Sprawdź, czy element Canvas GoogleMap jest już bezczynny.
- 27. Sprawdź, czy obiekt został utworzony czy nie w delphi
- 28. Sprawdź, czy referencyjny strumień jest NULL nie skompilować już
- 29. Sprawdź, czy lista tablicowa Java zawiera obiekt
- 30. Sprawdź, czy element ma już datepicker jQuery
Czy to scenariusz '' get_or_create''? Jeśli tak, to: http://stackoverflow.com/questions/2546207/does-sqlalchemy-have-an-equivalent-of-djangos-get-or-create –
@DemianBrecht, dzięki za odpowiedź, ale nie, to nie jest . – missingfaktor
@missingfaktor skąd wiadomo, że już istnieje? Na podstawie klucza podstawowego? Lub jakiś inny unikalny klucz? – jadkik94