sql >> Databáze >  >> RDS >> PostgreSQL

heroku, postgreSQL, django, comments, tastypie:Zadanému jménu a typu argumentu neodpovídá žádný operátor. Možná budete muset přidat explicitní přetypování

PostgreSQL je „silně typovaný“ – to znamená, že každá hodnota v každém dotazu má konkrétní typ, buď definovaný explicitně (např. typ sloupce v tabulce), nebo implicitně (např. hodnoty zadané do WHERE doložka). Všechny funkce a operátory, včetně = , musí být definovány jako akceptující specifické typy - takže například existuje operátor pro VarChar = VarChar a jiný pro int = int .

Ve vašem případě máte sloupec, který je explicitně definován jako typ int , ale porovnáváte ji s hodnotou, kterou PostgreSQL interpretoval jako typ text .

SQLite je na druhé straně "slabě typovaný" - s hodnotami se volně zachází jako s jakýmkoli typem, který nejlépe vyhovuje prováděné akci. Takže ve vaší dev SQLite databázi operace '42' = 42 lze v pohodě vypočítat, kde by PostgreSQL potřeboval konkrétní definici VarChar = int (nebo text = int , text je typem pro neomezené řetězce v PostgreSQL).

Nyní bude PostgreSQL někdy buďte nápomocní a automaticky „přetypujte“ své hodnoty, aby typy odpovídaly známému operátoru, ale častěji, jak říká nápověda, to musíte dělat explicitně. Pokud byste psali SQL sami, explicitní případ typu by mohl vypadat takto:WHERE id = CAST('42' AS INT) (nebo WHERE CAST(id AS text) = '42' ).

Protože nejste, musíte zajistit, aby vstup, který zadáte generátoru dotazů, byl skutečným celým číslem, nikoli pouze řetězcem, který se náhodou skládá z číslic. Mám podezření, že je to stejně jednoduché jako použití fields.IntegerField spíše než fields.CharField , ale ve skutečnosti neznám Djanga, dokonce ani Python, takže jsem si řekl, že vám poskytnu pozadí v naději, že to odtamtud převezmete.



  1. Dejte si pozor na zavádějící data z SET STATISTICS IO

  2. MariaDB LAST_INSERT_ID() Vysvětleno

  3. Jak zrychlím počítání řádků v tabulce PostgreSQL?

  4. Ukládání konfigurací v androidu