使用sqlite3将值列表添加为列

时间:2019-11-20 14:34:37

标签: python sqlite

使用sqlite3,可以说我有一个包含2000行的表。为此,我想添加一个新列。 我将此列作为2000个值的列表(作为实际的python列表)。如何将此列表添加为表格的列? 我已经看到命令ALTER_TABLE:

ALTER TABLE {tableName} ADD COLUMN COLNew {type};

它似乎允许我提供列名和列数据类型,但是我应该在哪里添加该列的值?

我也看到了命令:

UPDATE table_name SET column_name=new_value

但是即使在这里,似乎也只有一种方法可以根据条件输入值。似乎不适合我准备好值的情况。

1 个答案:

答案 0 :(得分:0)

使用ALTER TABLE ? ADD COLUMN ? ....

新列中的值将为null,或者,如果您使用DEFAULT the_default_value,则该列将设置为默认值。

如果可以轻松地从以前存在的列中导出值,则可以使用和UPDATE设置值。

例如,考虑以下简单示例:-

/* Create the original environment/data */
DROP TABLE IF EXISTS mytable;
CREATE TABLE IF NOT EXISTS mytable (id INTEGER PRIMARY KEY, myfirstcolumn TEXT);
INSERT INTO mytable (myfirstcolumn) VALUES 
        ('A'),('B'),('C'),('D'),
        ('A'),('B'),('C'),('D'),('E'),('F');

/* Display the data prior to adding the new column */
SELECT * FROM mytable;

/* Add the new column with default value of Z  and then display the table*/
ALTER TABLE mytable ADD COLUMN mysecondcolumn TEXT DEFAULT 'Z'; /* sets all columns to z */
SELECT * FROM mytable;

/* Example of updating the data in the new column */
UPDATE mytable 
    SET mysecondcolumn = 
        CASE 
            WHEN myfirstcolumn = 'A' THEN 'ZA' /* IF myfirstcolumn is A then make mysecondcolumn ZA */
            WHEN myfirstcolumn = 'B' THEN 'YB' /* IF myfirstcolumn is B then make mysecondcolumn YB */
            WHEN myfirstcolumn = 'C' THEN 'XC' /* IF myfirstcolumn is C then make mysecondcolumn XC */
            ELSE 'ZZ'  /* IF myfirstcolumn is not A, B or C then make mysecondcolumn ZZ */
        END
    WHERE mysecondcolumn = 'Z' /* not really required as all rows will have Z */
;
/* Display end results */
SELECT * FROM mytable;
/* Clean up testing environment */
DROP TABLE IF EXISTS mytable;

结果

初始表

enter image description here

ALTER之后的表格

enter image description here

更新后的表

enter image description here

示例2-通过列表

/* Create the original environment/data */
DROP TABLE IF EXISTS mytable;
CREATE TABLE IF NOT EXISTS mytable (id INTEGER PRIMARY KEY, myfirstcolumn TEXT);
INSERT INTO mytable (myfirstcolumn) VALUES 
        ('A'),('B'),('C'),('D'),
        ('A'),('B'),('C'),('D'),('E'),('F');

/* Display the data prior to adding the new column */
SELECT * FROM mytable;

/* Add the new column with default value of Z  and then display the table*/
ALTER TABLE mytable ADD COLUMN mysecondcolumn TEXT DEFAULT 'Z'; /* sets all columns to z */
SELECT * FROM mytable;

/* Example of updating the data from a list containing first column value and value to use  */

/* A temporary table build from the list */
DROP TABLE IF EXISTS myvalueslist;
CREATE TEMP TABLE myvalueslist (lookupvalue TEXT PRIMARY KEY, replacevalue TEXT);
INSERT INTO myvalueslist VALUES ('A','ZA'),('B','YB'),('C','XC'),('F','UF'); 

/* Do the update */
UPDATE mytable 
    SET mysecondcolumn = coalesce((SELECT replacevalue FROM myvalueslist WHERE myfirstcolumn = lookupvalue),'ZZ')
;
DROP TABLE IF EXISTS myvalueslist;
/* Display end results */
SELECT * FROM mytable;
/* Clean up testing environment */
DROP TABLE IF EXISTS mytable;

结果相似,唯一的不同是,当第一列为F(而不是默认的ZZ)时,第二个列将成为UF,这是附加条件:-

enter image description here