栏" is_superuser"是整数类型但表达式的类型为boolean DJANGO Error

时间:2015-02-20 18:50:42

标签: django python-3.x heroku heroku-postgres

我可以使用一些帮助。我的python 3.4 Django 1.7.4网站使用sqlite工作正常。现在我把它移到了使用Postgres的Heroku。当我尝试创建用户/密码时,我收到此错误:

column "is_superuser" is of type integer but expression is of type boolean
LINE 1: ...15-02-08 19:23:26.965870+00:00', "is_superuser" = false, "us...
                                                             ^
HINT:  You will need to rewrite or cast the expression.

The last function call in the stack trace is:
/app/.heroku/python/lib/python3.4/site-packages/django/db/backends/utils.py in execute
                return self.cursor.execute(sql, params) ...
▶ Local vars

我无权访问基本django代码,只能访问我应用中的代码。因此,任何帮助实现这一目标的帮助都会非常有用。

3 个答案:

答案 0 :(得分:0)

在我看来,您使用原始SQL查询而不是Django ORM调用,这会在切换数据库引擎时导致可移植性问题。如果你的情况可行,我强烈建议使用ORM。如果没有,那么我会说您需要自己检测数据库引擎并根据当前引擎构建查询。

在这种情况下,您可以尝试使用0而不是false,我想这应该适用于SQLite和Postgres。

答案 1 :(得分:0)

我在 django 中执行原始 sql 查询时遇到了同样的问题,但通过使用 True|False 来转换布尔表达式而不是 0|1 就解决了。

下面写了查询代码块,在django中完美执行

cursor.execute(
   "insert into userapi_user(email,username,first_name,last_name,mobile_number,password,is_superuser,is_staff,is_active,date_joined)"
    "values(%s,%s,%s,%s,%s,%s,False,False,True,%s)",
    (email, username, first_name, last_name, mobile_number, password, date)
)

答案 2 :(得分:-1)

问题是由尝试在迁移文件中更改数据类型(即从char字段到日期时间)的变量引起的。像PostgreSQL这样的数据库可能不知道如何更改变量类型。

因此,请确保变量在所有迁移中具有相同的类型。