我正在尝试将新行插入到以下PostgreSQL表中:
Table "public.users"
Column | Type | Collation | Nullable | Default
---------------+--------------------------+-----------+----------+----------------------------------------------
user_id | integer | | not null | nextval('define_user_user_id_seq'::regclass)
time_created | timestamp with time zone | | not null |
is_active | boolean | | not null | true
email_address | text | | not null |
password_hash | character varying(255) | | not null |
first_name | text | | |
second_name | text | | |
Indexes:
"users_pkey" PRIMARY KEY, btree (user_id)
Referenced by:
TABLE "user_to_device" CONSTRAINT "user_to_device_user_id_fkey" FOREIGN KEY (user_id) REFERENCES users(user_id)
TABLE "user_to_horse" CONSTRAINT "user_to_horse_user_id_fkey" FOREIGN KEY (user_id) REFERENCES users(user_id)
该表当前仅包含10条记录,因为它仍在用于开发。没有修改表的范围。
我的问题是,从REST API更新表时,该操作似乎成功完成并返回了新的user_id
;在查询表时,假定创建的用户不在表中。
如果我随后手动创建用户(通过SSH登录运行psql的服务器)并使用完全相同的查询,则操作成功,并且可以看到新创建的用户。有趣的是,user_id
的值从REST API触发的查询创建的值开始递增。
这向我表明,通过REST API触发的查询成功(?),因为它创建的user_id
似乎可以被后续查询识别-那么为什么新用户不出现在表中?
根本不会引发任何错误。这是我用来创建用户的查询:
INSERT INTO users (password_hash, is_active, first_name, email_address, second_name, time_created) VALUES ('mypasswordhash', True, 'Orson', 'user@example.com', 'Cart', '2018-11-23T12:23:00Z') RETURNING user_id;
通过API查询时,我正在Python 3.6中使用psycopg2
。我还有多个其他API端点,可以成功将它们插入到其他表中,因此我完全不确定问题是什么。非常感谢您的任何帮助,因为这让我感到非常难过。
答案 0 :(得分:1)
您绝对确定吗?
您的commit
函数被调用了吗?
在某些情况下
如果您是yield
或return
在提交之前,
该函数被中止
在您做出更改之前。
在这种情况下,我希望看到 没有插入行的递增ID, 随着主键的增加 在检查查询之前。 如果您的连接突然终止, 该行将不会提交。
您最好的选择是 检查您的PostgreSQL服务器日志。