Python 使用sqlite3将值列表添加为列

Python 使用sqlite3将值列表添加为列,python,sqlite,Python,Sqlite,使用sqlite3,假设我有一个2000行的表。为此,我想添加一个新专栏。 我将此列作为2000个值的列表(作为实际的python列表)。如何将此列表添加为表的列? 我已经看到命令ALTER_表: ALTER TABLE {tableName} ADD COLUMN COLNew {type}; 这似乎允许我提供列名和列数据类型,但我应该在哪里添加此列的值 此外,我还看到了命令: UPDATE table_name SET column_name=new_value 但即使在这里,似乎也只有

使用sqlite3,假设我有一个2000行的表。为此,我想添加一个新专栏。 我将此列作为2000个值的列表(作为实际的python列表)。如何将此列表添加为表的列? 我已经看到命令ALTER_表:

ALTER TABLE {tableName} ADD COLUMN COLNew {type};
这似乎允许我提供列名和列数据类型,但我应该在哪里添加此列的值

此外,我还看到了命令:

UPDATE table_name SET column_name=new_value

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

使用
更改表格时?添加列

新列中的值将为空,或者如果使用默认值,则该列将设置为默认值

如果可以轻松地从以前存在的列派生值,则可以使用和更新来设置值

例如,考虑下面的简单例子:-< /P>
/* 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;
结果 初始表

更改后的表格

更新后的表

示例2-通过列表 结果类似,唯一的区别是增加了一个附加条件,即当第一列为F(而不是默认的ZZ)时,第二列将为UF:-


为什么要用python标记?我使用sqlite3,并且我将值作为python列表。您需要一种方法来确定,对于列表中的任何给定元素,哪些行应该用该值更新。在SQL中,您不会以这种方式在列中插入值。修改表以添加新列,然后为每个现有行更新该列值,或者插入包含该列值的新行。您可以对每一行或选择的行执行此操作,。您总是逐行地处理表(每行只使用一个列值列表)。您可以考虑在Python中将列追加到表中(将列表视为数组,而表则像数据文件一样)。可能有点粗制滥造,但可能更清晰、更直接。
/* 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;