【问题标题】:Table id no longer being returned - failure on update in Flask app (psycopg2-sqlalchemy-postgresql)不再返回表 id - Flask 应用程序更新失败 (psycopg2-sqlalchemy-postgresql)
【发布时间】:2020-09-15 14:41:54
【问题描述】:

我正在使用带有 psycopg2 的 PostgreSQL 和 SQLAlchemy 开发 Flask 应用程序。我在 Debian Bullseye/sid 上进行开发,并在 Ubuntu 18.04.4 LTS 上运行了一个测试网站。最近(我很遗憾我无法确定更新),我无法在本地机器上的烧瓶外壳中向数据库提交任何内容;每次尝试都会在主键表 ID 上出现 NotNullViolation 失败。以前一直是这样处理的。以下是错误示例:

>>> db.session.commit()
Traceback (most recent call last):
  File "[...]DandyLion/.venv/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1283, in _execute_context [...]
sqlalchemy.exc.IntegrityError: (psycopg2.errors.NotNullViolation) null value in column "id" violates not-null constraint
DETAIL:  Failing row contains (null, 1, Resolve database id problem, null_id_problem, null, null, 2020-05-28 08:01:00.184953, null, 2020-05-30 17:00:00, [...]).
[SQL: INSERT INTO tasks (user_id, title, slug, [...]) RETURNING tasks.id]

数据库设置如下:

app.config.from_object(Config)
db = SQLAlchemy(app)

我承认对实现细节一无所知,但请注意回溯中的 SQL 语句表明应该返回 tasks.id。以前一直都是这样。

以下是(工作)服务器和本地设置上的版本:

蟒蛇:3.8.3、3.6.8 psycopg2:2.8.4、2.8.4 sqlalchemy:1.3.12、1.3.17 PostgresSQL:10.12、12.3

我最初调查了 psycopg2,在本地机器上更改了我的 Pipfile 中的版本。为了进一步调查,我将不胜感激对最可能的故障点的任何见解。有人可以帮忙吗?

【问题讨论】:

    标签: python flask sqlalchemy psycopg2


    【解决方案1】:

    正如this SO post 中所述,您正在尝试将 NULL 值发布为您的id

    您可以通过为id 提供值或将id 列类型更改为serial 来解决此问题。

    【讨论】:

    • 谢谢...我还在调查,但我没有在这里提供足够的信息。我已经注释掉了一些设置应用程序和数据库并初始化 flask-SQLAlchemy 的导入。我的数据库已部分初始化并正在返回帖子等,但没有正确配置数据库连接。我将继续调查并在下面发布答案。
    猜你喜欢
    • 2021-07-02
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    相关资源
    最近更新 更多