我可以使用一些帮助。我的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代码,只能访问我应用中的代码。因此,任何帮助实现这一目标的帮助都会非常有用。
答案 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这样的数据库可能不知道如何更改变量类型。
因此,请确保变量在所有迁移中具有相同的类型。