【问题标题】:column "is_superuser" is of type integer but expression is of type boolean DJANGO Error列“is_superuser”是整数类型,但表达式是布尔类型 DJANGO 错误
【发布时间】:2015-04-22 13:18:47
【问题描述】:

我需要一些帮助。我的 python 3.4 Django 1.7.4 站点使用 sqlite 运行良好。现在我把它移到了使用 Postgres 的 Heroku。当我尝试创建用户/密码时,出现此错误:

列“is_superuser”是整数类型,但表达式是布尔类型 第 1 行:...15-02-08 19:23:26.965870+00:00', "is_superuser" = false, "我们... ^ 提示:您将需要重写或强制转换表达式。 堆栈跟踪中的最后一个函数调用是: /app/.heroku/python/lib/python3.4/site-packages/django/db/backends/utils.py 在执行 返回 self.cursor.execute(sql, params) ... ▶ 本地变量

我无法访问基本的 django 代码,只能访问我的应用程序上的代码。因此,任何帮助使其发挥作用都会非常有帮助。

【问题讨论】:

  • 请您发布完整的回溯。

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


【解决方案1】:

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

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

【讨论】:

  • 抱歉,Django 正在执行所有 SQL 查询,这里没有原始查询。一切都已经基于模型的 ORM。错误在 django 基本代码中。
  • 听到这个消息我真的松了一口气 ;) 那么让我们深入挖掘一下——那你是如何创建表格的?也许你已经使用了在 SQLlite 中创建数据库并在 Postgres 上执行的 SQL?我是一个疯狂的猜测,但如果是使用 django 管理命令创建的,这个列应该是 bool,而不是 int...
  • 好吧,既然一切都是基于模型的,我只是告诉 Django 在 settings.py 应用程序中使用什么数据库类型。我所做的唯一更改是使用 Heroku 推荐的数据库设置而不是 Django sqlite 设置。
  • 对不起,但这并不能回答我的问题。你能告诉我/我们你是如何创建表格的吗?您是否在 Heroku 上使用了 Django 管理命令,或者您是否直接连接到数据库并执行从 SQLite 模式获取的任意 SQL?如果您可以提供来自settings.pyDATABASES 设置和requirements.txt 的内容,这也会很有用——也许您正在使用一些奇怪的postgress 连接器,它没有进行正确的值转换(发生here)。
【解决方案2】:

我在 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)
)

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 我忘了提。特别感谢 #django 上的 apollo13 解决了这个问题。
    猜你喜欢
    • 2018-10-09
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    相关资源
    最近更新 更多