sql >> Base de Datos >  >> RDS >> PostgreSQL

heroku, postgreSQL, django, comments, sabrosopie:ningún operador coincide con el nombre dado y los tipos de argumento. Es posible que deba agregar conversiones de tipos explícitos

PostgreSQL está "fuertemente tipado", es decir, cada valor en cada consulta tiene un tipo particular, ya sea definido explícitamente (por ejemplo, el tipo de una columna en una tabla) o implícitamente (por ejemplo, los valores ingresados ​​en un WHERE cláusula). Todas las funciones y operadores, incluido = , deben definirse para aceptar tipos específicos; por ejemplo, hay un operador para VarChar = VarChar , y otro diferente para int = int .

En su caso, tiene una columna que se define explícitamente como tipo int , pero lo está comparando con un valor que PostgreSQL ha interpretado como tipo text .

SQLite, por otro lado, está "débilmente tipado":los valores se tratan libremente como si fueran del tipo que mejor se adapte a la acción que se está realizando. Entonces, en su base de datos SQLite de desarrollo, la operación '42' = 42 se puede calcular bien, donde PostgreSQL necesitaría una definición específica de VarChar = int (o text = int , text siendo el tipo para cadenas ilimitadas en PostgreSQL).

Ahora, PostgreSQL a veces sea ​​útil y "emita" automáticamente sus valores para que los tipos coincidan con un operador conocido, pero más a menudo, como dice la sugerencia, debe hacerlo explícitamente. Si estuviera escribiendo el SQL usted mismo, un caso de tipo explícito podría verse como WHERE id = CAST('42' AS INT) (o WHERE CAST(id AS text) = '42' ).

Como no lo es, debe asegurarse de que la entrada que proporcione al generador de consultas sea un número entero real, no solo una cadena que consta de dígitos. Sospecho que esto es tan simple como usar fields.IntegerField en lugar de fields.CharField , pero en realidad no conozco Django, ni siquiera Python, así que pensé en darte los antecedentes con la esperanza de que puedas continuar desde allí.