如何将整列插入我之前在 pgAdmin4 中创建的 table?
How do I insert entire columns into my previously created table in pgAdmin4?
给定 2 个名为学生(姓名、课程)和教授(ProfID、姓名、课程)的 csv 文件。
使用给定的代码:
cur.execute('INSERT INTO TABLE (col1, col2, col3) VALUES(%s, %s)', (value1, value2, value3))
cur.execute(query)
set1 = cur.fetchall()
set2 = cur.fetchone()
现有table:
ProfID、姓名、课程
没有现有的学号。我怎样才能将它们分配给每个学生?
如何将上述示例中的列(csv 文件中的所有值,不限于上述 3 个值)插入我的 table?
以及如何对 table 的数据进行重复数据删除?
可能有很多可能的解决方案,但是,我尝试仅使用 SQL 脚本自行创建。
我使用以下脚本创建了一个 table。
CREATE TABLE public.my_table
(
column_one character varying(20) COLLATE pg_catalog."default",
column_two character varying(20) COLLATE pg_catalog."default",
column_three character varying(20) COLLATE pg_catalog."default",
column_four character varying(20) COLLATE pg_catalog."default"
);
暂时我手动插入数据
INSERT INTO public.my_table(column_one, column_two, column_three, column_four) VALUES ('data1', 'data2', 'data3', 'data4');
INSERT INTO public.my_table(column_one, column_two, column_three, column_four) VALUES ('data11', 'data11', 'data11', 'data11');
INSERT INTO public.my_table(column_one, column_two, column_three, column_four) VALUES ('data21', 'data21', 'data21', 'data21');
INSERT INTO public.my_table(column_one, column_two, column_three, column_four) VALUES ('data31', 'data31', 'data31', 'data31');
INSERT INTO public.my_table(column_one, column_two, column_three, column_four) VALUES ('data41', 'data41', 'data41', 'data41');
INSERT INTO public.my_table(column_one, column_two, column_three, column_four) VALUES ('data51', 'data51', 'data51', 'data51');
INSERT INTO public.my_table(column_one, column_two, column_three, column_four) VALUES ('data61', 'data61', 'data61', 'data61');
然后我按照脚本
修改了table
ALTER TABLE my_table ADD COLUMN column_id INTEGER;
之后我更新了循环中的列
BEGIN TRANSACTION;
DO $$
DECLARE
col_id bigint := 1 ;
colTemp character(40);
BEGIN
FOR colTemp IN
SELECT * FROM public.my_table
LOOP
UPDATE my_table set column_id = col_id where column_one = colTemp;
col_id := col_id + 1 ;
END LOOP;
END $$;
--ROLLBACK TRANSACTION; --rollback in case of exception
COMMIT TRANSACTION; --commit
更改现有 table 结构时定义主键
ALTER TABLE my_table ADD PRIMARY KEY (column_id);
注意:请在将其用于某些测试数据之前对其进行测试。如果我误解了您的 questions/requirements,请原谅我。我花了很长时间才找到解决方案。任何类型的建议都将不胜感激。
编辑说明:我只是想通过一些改进来简化问题:-
ALTER TABLE my_table ADD COLUMN column_id INTEGER;
循环变化
BEGIN TRANSACTION;
DO $$
DECLARE
col_id bigint := 1 ;
colTemp record ;
BEGIN
FOR colTemp IN
SELECT column_one, column_two, column_three, column_four
FROM my_table
LOOP
UPDATE my_table set column_id = col_id where column_one = colTemp.column_one;
col_id := col_id + 1 ;
END LOOP;
END $$;
--ROLLBACK TRANSACTION; --rollback in case of exception
COMMIT TRANSACTION; --commit
select 列中的最大 id 并在 seq 中递增 1
SELECT MAX(column_id) FROM my_table;
添加约束
-- select max id and add one to it in start value
CREATE SEQUENCE my_table_colid_seq
START 18
INCREMENT 1
OWNED BY my_table.column_id;
ALTER TABLE my_table ALTER COLUMN column_id SET DEFAULT nextval('my_table_colid_seq');
ALTER TABLE my_table ADD CONSTRAINT column_id_pk PRIMARY KEY (column_id)
解决方案 2:
ALTER TABLE my_table ADD COLUMN column_id INTEGER;
CREATE SEQUENCE my_table_colid_seq
START 18
INCREMENT 1
OWNED BY my_table.column_id;
ALTER TABLE my_table ALTER COLUMN column_id SET DEFAULT nextval('my_table_colid_seq');
UPDATE
my_table
SET
column_id = nextval('my_table_colid_seq');
注意-在运行随机查询之前,只是运行测试它并用数据做实验,tables.Please请原谅打字错误.任何建议将不胜感激。
给定 2 个名为学生(姓名、课程)和教授(ProfID、姓名、课程)的 csv 文件。
使用给定的代码:
cur.execute('INSERT INTO TABLE (col1, col2, col3) VALUES(%s, %s)', (value1, value2, value3))
cur.execute(query)
set1 = cur.fetchall()
set2 = cur.fetchone()
现有table: ProfID、姓名、课程
没有现有的学号。我怎样才能将它们分配给每个学生?
如何将上述示例中的列(csv 文件中的所有值,不限于上述 3 个值)插入我的 table? 以及如何对 table 的数据进行重复数据删除?
可能有很多可能的解决方案,但是,我尝试仅使用 SQL 脚本自行创建。
我使用以下脚本创建了一个 table。
CREATE TABLE public.my_table
(
column_one character varying(20) COLLATE pg_catalog."default",
column_two character varying(20) COLLATE pg_catalog."default",
column_three character varying(20) COLLATE pg_catalog."default",
column_four character varying(20) COLLATE pg_catalog."default"
);
暂时我手动插入数据
INSERT INTO public.my_table(column_one, column_two, column_three, column_four) VALUES ('data1', 'data2', 'data3', 'data4');
INSERT INTO public.my_table(column_one, column_two, column_three, column_four) VALUES ('data11', 'data11', 'data11', 'data11');
INSERT INTO public.my_table(column_one, column_two, column_three, column_four) VALUES ('data21', 'data21', 'data21', 'data21');
INSERT INTO public.my_table(column_one, column_two, column_three, column_four) VALUES ('data31', 'data31', 'data31', 'data31');
INSERT INTO public.my_table(column_one, column_two, column_three, column_four) VALUES ('data41', 'data41', 'data41', 'data41');
INSERT INTO public.my_table(column_one, column_two, column_three, column_four) VALUES ('data51', 'data51', 'data51', 'data51');
INSERT INTO public.my_table(column_one, column_two, column_three, column_four) VALUES ('data61', 'data61', 'data61', 'data61');
然后我按照脚本
修改了tableALTER TABLE my_table ADD COLUMN column_id INTEGER;
之后我更新了循环中的列
BEGIN TRANSACTION;
DO $$
DECLARE
col_id bigint := 1 ;
colTemp character(40);
BEGIN
FOR colTemp IN
SELECT * FROM public.my_table
LOOP
UPDATE my_table set column_id = col_id where column_one = colTemp;
col_id := col_id + 1 ;
END LOOP;
END $$;
--ROLLBACK TRANSACTION; --rollback in case of exception
COMMIT TRANSACTION; --commit
更改现有 table 结构时定义主键
ALTER TABLE my_table ADD PRIMARY KEY (column_id);
注意:请在将其用于某些测试数据之前对其进行测试。如果我误解了您的 questions/requirements,请原谅我。我花了很长时间才找到解决方案。任何类型的建议都将不胜感激。
编辑说明:我只是想通过一些改进来简化问题:-
ALTER TABLE my_table ADD COLUMN column_id INTEGER;
循环变化
BEGIN TRANSACTION;
DO $$
DECLARE
col_id bigint := 1 ;
colTemp record ;
BEGIN
FOR colTemp IN
SELECT column_one, column_two, column_three, column_four
FROM my_table
LOOP
UPDATE my_table set column_id = col_id where column_one = colTemp.column_one;
col_id := col_id + 1 ;
END LOOP;
END $$;
--ROLLBACK TRANSACTION; --rollback in case of exception
COMMIT TRANSACTION; --commit
select 列中的最大 id 并在 seq 中递增 1
SELECT MAX(column_id) FROM my_table;
添加约束
-- select max id and add one to it in start value
CREATE SEQUENCE my_table_colid_seq
START 18
INCREMENT 1
OWNED BY my_table.column_id;
ALTER TABLE my_table ALTER COLUMN column_id SET DEFAULT nextval('my_table_colid_seq');
ALTER TABLE my_table ADD CONSTRAINT column_id_pk PRIMARY KEY (column_id)
解决方案 2:
ALTER TABLE my_table ADD COLUMN column_id INTEGER;
CREATE SEQUENCE my_table_colid_seq
START 18
INCREMENT 1
OWNED BY my_table.column_id;
ALTER TABLE my_table ALTER COLUMN column_id SET DEFAULT nextval('my_table_colid_seq');
UPDATE
my_table
SET
column_id = nextval('my_table_colid_seq');
注意-在运行随机查询之前,只是运行测试它并用数据做实验,tables.Please请原谅打字错误.任何建议将不胜感激。