PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

heroku, postgreSQL, django, komentarze, deliciouspie:Żaden operator nie pasuje do podanej nazwy i typu argumentu. Może być konieczne dodanie wyraźnych rzutów typu

PostgreSQL jest "silnie typizowany" - co oznacza, że ​​każda wartość w każdym zapytaniu ma określony typ, zdefiniowany jawnie (np. typ kolumny w tabeli) lub niejawnie (np. wartości wprowadzane do WHERE klauzula). Wszystkie funkcje i operatory, w tym = , muszą być zdefiniowane jako akceptujące określone typy - tak na przykład istnieje operator dla VarChar = VarChar i inny dla int = int .

W twoim przypadku masz kolumnę, która jest wyraźnie zdefiniowana jako typ int , ale porównujesz go z wartością, którą PostgreSQL zinterpretował jako typ text .

Z drugiej strony SQLite jest "słabo wpisany" - wartości są swobodnie traktowane jako dowolnego typu, który najlepiej pasuje do wykonywanej akcji. Tak więc w twojej dev SQLite bazie danych operacja '42' = 42 można obliczyć dobrze, gdzie PostgreSQL wymagałby określonej definicji VarChar = int (lub text = int , text jest typem dla nieograniczonych ciągów w PostgreSQL).

Teraz PostgreSQL czasami bądź pomocny i automatycznie „rzucaj” swoje wartości, aby typy pasowały do ​​znanego operatora, ale częściej, jak mówi podpowiedź, musisz to zrobić wprost. Jeśli sam piszesz SQL, jawny typ wielkości liter może wyglądać tak:WHERE id = CAST('42' AS INT) (lub WHERE CAST(id AS text) = '42' ).

Ponieważ tak nie jest, musisz upewnić się, że dane wejściowe, które podajesz do generatora zapytań, jest rzeczywistą liczbą całkowitą, a nie tylko łańcuchem, który składa się z cyfr. Podejrzewam, że jest to tak proste, jak użycie fields.IntegerField zamiast fields.CharField , ale tak naprawdę nie znam Django ani nawet Pythona, więc pomyślałem, że przedstawię ci tło w nadziei, że możesz to stamtąd wyciągnąć.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmienianie pola Enum za pomocą Alembic

  2. Uzyskaj wartości z pierwszego i ostatniego wiersza na grupę

  3. Powiąż parametr tablicy z natywnym zapytaniem

  4. PG::Błąd:SELECT DISTINCT, ORDER BY wyrażenia muszą pojawić się na liście wyboru

  5. Dynamiczna funkcja zapytań Postgres