Mysql
 sql >> Baza danych >  >> RDS >> Mysql

możliwe filtrowanie zestawu zapytań po zapytaniu? django

Tak, możesz ponownie wykorzystać istniejące zestawy zapytań.

everyone = User.objects.filter(is_active=True)
active_not_deleted = everyone.filter(is_deleted=False)
active_is_deleted = everyone.filter(is_deleted=True)

To naprawdę nie przyspiesza niczego, chociaż w rzeczywistości ten blok kodu nie wykona nawet zapytania do bazy danych, ponieważ zestawy Django QuerySets są leniwie oceniane. Mam na myśli to, że nie wyśle ​​zapytania do bazy danych, dopóki nie będziesz potrzebować wartości. Oto przykład, który będzie komunikował się z bazą danych.

everyone = User.objects.filter(is_active=True)  # Building SQL...
active_not_deleted = everyone.filter(is_deleted=False)  # Building SQL...
active_is_deleted = everyone.filter(is_deleted=True)  # Building SQL...

# Example of the whole queryset being evaluated
for user in everyone:
    # This will execute the query against the database to return the list of users
    # i.e. "select * from user where is_active is True;"
    print(user)

# Example of using iterator to evaluate one object at a time from the queryset.
for user in active_not_deleted.iterator():
    # This will execute the query for each result, so it doesn't
    # load everything at once and it doesn't cache the results.
    # "select * from user where is_active is True and is_deleted is False limit 1 offset 0;"
    # The offset is incremented on each loop and another query is sent to retrieve the next user in the list.
    print(user)

Polecam lekturę:

Jako dodatek do tej odpowiedzi, możesz utworzyć pojedyncze zapytanie, a następnie filtrować w Pythonie, jeśli naprawdę chcesz. Pamiętaj, że nie możesz wykonać kolejnego filtrowania na listach, ponieważ nie są one zestawami zapytań.

everyone = User.objects.filter(is_active=True)
active_not_deleted = list(filter(lambda user: user.is_deleted is False), list(everyone))
active_is_deleted = list(filter(lambda user: user.is_deleted is True), list(everyone))

W tym ostatnim przykładzie everyone jest zestawem zapytań, a active_not_deleted i active_is_deleted to listy Pythona obiektów użytkownika. everyone queryset będzie oceniany tylko raz na pierwszej list(everyone) zadzwonić, a następnie wyniki zostaną zapisane w pamięci podręcznej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL wybierz, gdzie kolumna nie jest pusta

  2. SonarQube :Jak zmniejszyć rozmiar Measure_data.ibd?

  3. pdo przygotowane wyciągi z symbolami wieloznacznymi

  4. mysqli_connect():(HY000/2002):Przekroczono limit czasu połączenia na hostingu

  5. Jak wyszukiwać (bez uwzględniania wielkości liter) w kolumnie przy użyciu symbolu wieloznacznego LIKE?