PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

heroku, postgreSQL, django, comments, tastypie:Никой оператор не отговаря на даденото име и тип(ове) на аргумента. Може да се наложи да добавите изрични прехвърляния на типа

PostgreSQL е "силно въведен" - тоест всяка стойност във всяка заявка има определен тип, дефиниран изрично (например типът на колона в таблица) или имплицитно (например стойностите, въведени в WHERE клауза). Всички функции и оператори, включително = , трябва да бъдат дефинирани като приемащи специфични типове - така че например има оператор за VarChar = VarChar и различен за int = int .

Във вашия случай имате колона, която е изрично дефинирана като тип int , но го сравнявате със стойност, която PostgreSQL е интерпретирала като тип text .

SQLite, от друга страна, е "слабо въведен" - стойностите се третират свободно като тип, който най-добре отговаря на извършваното действие. Така че във вашата dev SQLite база данни операцията '42' = 42 може да се изчисли добре, където PostgreSQL ще се нуждае от конкретна дефиниция на VarChar = int (или text = int , text е типът за неограничени низове в PostgreSQL).

Сега PostgreSQL ще понякога бъдете полезни и автоматично „прехвърляйте“ стойностите си, за да накарате типовете да съответстват на известен оператор, но по-често, както се казва в намека, трябва да го правите изрично. Ако сами пишете SQL, изричен случай на тип може да изглежда като WHERE id = CAST('42' AS INT) (или WHERE CAST(id AS text) = '42' ).

Тъй като не сте, трябва да се уверите, че входът, който давате на генератора на заявки, е действително цяло число, а не просто низ, който се състои от цифри. Подозирам, че това е толкова просто, колкото използването на fields.IntegerField вместо fields.CharField , но всъщност не познавам Django или дори Python, така че реших да ви дам фона с надеждата, че можете да го вземете оттам.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо дори да използвате *DB.exec() или подготвени изрази в Golang?

  2. Как да игнорирате грешки с метакомандата psql \copy

  3. Използване на jsonb_set() за актуализиране на конкретна стойност на jsonb масив

  4. Създайте таблица от два типа в PostgreSQL

  5. Как да създадете потребител само за четене в PostgreSQL