gpt4 book ai didi

Python/PostgreSQL 插入行无效

转载 作者:行者123 更新时间:2023-11-29 12:32:47 24 4
gpt4 key购买 nike

我正在使用 pg8000 模块将 python 脚本连接到 postgreSQL 数据库,我想插入一些新行。当我运行脚本时,我没有收到任何错误,它似乎运行良好,但是当我之后检查表格时,实际上没有添加任何东西。

让我感到困惑的是,如果我打印出我正在使用 pg8000 游标对象执行的查询语句,然后只需复制/粘贴并在 pgadmin 界面中执行它,它就会正确地插入一个新行。

另一个奇怪的事情是,该表有一个基于 SERIAL 的 ID 字段,每次插入一行时都会自动更新。当我运行脚本时,这个序列正在更新。我可以告诉 b/c 下一个要添加的 ID,例如,是 6000。如果我运行脚本(应该添加大约 1000 行但没有),然后手动插入一行,新行的 ID 为 7000。

这是创建和执行语句的循环:

for row in new_signs:
query = "INSERT INTO {0}_signs (source_link, destination_link, exit_number) VALUES ({1},{2},'{3}');".format(city,row[0],row[1],row[2])
print query
cursor.execute(query)

和一些示例输出:

INSERT INTO osm_newyork_signs (source_link, destination_link, exit_number) VALUES (56423,1833854,'26');
INSERT INTO osm_newyork_signs (source_link, destination_link, exit_number) VALUES (353212,310961,'45');
INSERT INTO osm_newyork_signs (source_link, destination_link, exit_number) VALUES (203823,1862344,'63N');

和表定义:

CREATE TABLE public.osm_newyork_signs
(
source_link integer NOT NULL,
destination_link integer NOT NULL,
exit_number text,
"Branch_RouteID" character varying(64),
"Branch_RouteDir" character varying(6),
"Sign_TextType" character varying(6),
"Sign_Text" character varying(255),
"Toward_RouteID" character varying(64),
"Straight_On" character varying(255),
id integer NOT NULL DEFAULT nextval('osm_newyork_signs_id_seq'::regclass),
CONSTRAINT newyork_signs_pkey PRIMARY KEY (id),
CONSTRAINT check_branch_toward CHECK ("Sign_TextType"::text = 'B'::text OR "Sign_TextType"::text = 'T'::text OR "Sign_TextType" IS NULL)
)
WITH (
OIDS=FALSE
);

最佳答案

由于默认情况下自动提交是关闭的,除非您显式调用 conn.commit(),因此事务中完成的任何操作都将被撤消。但是,ID 号不会回滚,因此您会看到这种行为。

你有两个选择:

  1. 执行执行语句后显式提交:
    conn.commit()
  1. 在您的数据库连接上启用自动提交(在您创建游标之前):
    conn.autocommit = True

您可以在 http://pythonhosted.org/pg8000/quickstart.html#key-points 阅读更多相关信息

关于Python/PostgreSQL 插入行无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37709951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com