python (psycopg2) 中的 Postgres INSERT INTO 语句 hangs/freezes 没有插入或崩溃
Posgres in python (psycopg2) INSERT INTO statement hangs/freezes without inserting or crashing
我正在尝试将数据插入我的 persons
table。我已经尝试过在 python cursor.execute(sql)
中使用游标,并通过终端连接到数据库并在其中插入。但是,程序只是在执行点停止。 我最后承诺。 table 是空的,看起来像这样:
CREATE TABLE Persons(
AKey INT PRIMARY KEY, -- Person ID primary key
Name VARCHAR(128) UNIQUE NOT NULL, -- Person name
Website VARCHAR(256), -- URL for persons website
IKey INT REFERENCES Institutions -- Institution affiliation
);
插入示例如下所示:
INSERT INTO persons (Akey, Name, Website, IKey) VALUES(1, 'John Smith', 'www.foo.bar', 1);
没有插入,也没有产生错误。终端或 python 只是停在插入语句处,显然什么也没做。插入其他 tables 没有任何问题。
编辑:
我应该提一下,我是唯一一个在这个数据库上做交易的人,它只包含空 tables.
我想你忘记提交查询了。
完整示例如下所示:
import contextlib
import psycopg2
db_config = dict(database="...", user="...", password="...")
with contextlib.closing(psycopg2.connect(**db_config)) as connection:
try:
with contextlib.closing(connection.cursor()) as cursor:
sql = "INSERT INTO persons (Akey, Name, Website, IKey) VALUES(1, 'John Smith', 'www.foo.bar', 1);"
cursor.execute(sql)
connection.commit()
except:
connection.rollback()
raise
听起来你被一把锁挡住了。参见 Lock Monitoring。其他一些会话做了一些与您的冲突的事情,例如插入一个与您尝试插入的密钥或名称相同的人,或者从您尝试引用的机构中删除该行,并且该会话尚未提交。现在您的会话正在等待查看另一个会话是否提交或回滚。
我正在尝试将数据插入我的 persons
table。我已经尝试过在 python cursor.execute(sql)
中使用游标,并通过终端连接到数据库并在其中插入。但是,程序只是在执行点停止。 我最后承诺。 table 是空的,看起来像这样:
CREATE TABLE Persons(
AKey INT PRIMARY KEY, -- Person ID primary key
Name VARCHAR(128) UNIQUE NOT NULL, -- Person name
Website VARCHAR(256), -- URL for persons website
IKey INT REFERENCES Institutions -- Institution affiliation
);
插入示例如下所示:
INSERT INTO persons (Akey, Name, Website, IKey) VALUES(1, 'John Smith', 'www.foo.bar', 1);
没有插入,也没有产生错误。终端或 python 只是停在插入语句处,显然什么也没做。插入其他 tables 没有任何问题。
编辑: 我应该提一下,我是唯一一个在这个数据库上做交易的人,它只包含空 tables.
我想你忘记提交查询了。
完整示例如下所示:
import contextlib
import psycopg2
db_config = dict(database="...", user="...", password="...")
with contextlib.closing(psycopg2.connect(**db_config)) as connection:
try:
with contextlib.closing(connection.cursor()) as cursor:
sql = "INSERT INTO persons (Akey, Name, Website, IKey) VALUES(1, 'John Smith', 'www.foo.bar', 1);"
cursor.execute(sql)
connection.commit()
except:
connection.rollback()
raise
听起来你被一把锁挡住了。参见 Lock Monitoring。其他一些会话做了一些与您的冲突的事情,例如插入一个与您尝试插入的密钥或名称相同的人,或者从您尝试引用的机构中删除该行,并且该会话尚未提交。现在您的会话正在等待查看另一个会话是否提交或回滚。