我正在使用pg8000模塊將python腳本連接到postgreSQL數據庫,我想插入一些新行。當我運行這個腳本時,我沒有遇到任何錯誤,它看起來運行良好,但是當我查看錶格後,實際上沒有添加任何內容。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 = pg.connect(user ='',password ='',host ='',database ='') cursor = conn.cursor() – wmebane