PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

heroku, postgreSQL, django, commenti, gustosopie:nessun operatore corrisponde al nome specificato e ai tipi di argomenti. Potrebbe essere necessario aggiungere cast di tipi espliciti

PostgreSQL è "fortemente tipizzato", ovvero ogni valore in ogni query ha un tipo particolare, definito in modo esplicito (ad esempio il tipo di una colonna in una tabella) o implicitamente (ad esempio i valori inseriti in un WHERE clausola). Tutte le funzioni e gli operatori, incluso = , devono essere definiti per accettare tipi specifici, quindi, ad esempio, esiste un operatore per VarChar = VarChar e uno diverso per int = int .

Nel tuo caso, hai una colonna che è esplicitamente definita come tipo int , ma lo stai confrontando con un valore che PostgreSQL ha interpretato come tipo text .

SQLite, d'altra parte, è "tipizzato debolmente" - i valori sono liberamente trattati come di qualsiasi tipo si adatti meglio all'azione eseguita. Quindi nel tuo database di sviluppo SQLite l'operazione '42' = 42 può essere calcolato bene, dove PostgreSQL avrebbe bisogno di una definizione specifica di VarChar = int (o text = int , text essendo il tipo per stringhe illimitate in PostgreSQL).

Ora, PostgreSQL lo farà qualche volta essere utile e "trasmettere" automaticamente i tuoi valori per fare in modo che i tipi corrispondano a un operatore noto, ma più spesso, come dice il suggerimento, è necessario farlo in modo esplicito. Se stavi scrivendo tu stesso l'SQL, un caso di tipo esplicito potrebbe assomigliare a WHERE id = CAST('42' AS INT) (o WHERE CAST(id AS text) = '42' ).

Dal momento che non lo sei, devi assicurarti che l'input che dai al generatore di query sia un numero intero effettivo, non solo una stringa composta da cifre. Sospetto che sia semplice come usare fields.IntegerField anziché fields.CharField , ma in realtà non conosco Django, e nemmeno Python, quindi ho pensato di darti il ​​background nella speranza che tu possa riprenderlo da lì.