Python 基于SQLite中的条件创建列

Python 基于SQLite中的条件创建列,python,sqlite,Python,Sqlite,我正试图从Python在SQLite数据库中创建一个新列。如果满足条件,我希望列为1或0。我尝试了以下方法,但没有成功: query = 'SELECT codes CASE WHEN codes LIKE 'X10' THEN 1 ELSE 0 END as I10X FROM processed_data' cur.execute(query) 示例数据: +--------------+ | codes | | +--------------+ | X10, X11|

我正试图从Python在SQLite数据库中创建一个新列。如果满足条件,我希望列为1或0。我尝试了以下方法,但没有成功:

query = 'SELECT codes CASE WHEN codes LIKE 'X10' THEN 1 ELSE 0 END as I10X FROM processed_data'

cur.execute(query)
示例数据:

+--------------+
| codes   |    |
+--------------+
| X10, X11|    |
| x11, X9 |    |
| x10     |    |
| x13     |    |
+-------+------+
目标数据示例:

+----------+-----+
| codes    | X10 |
+----------+-----+
| X10, X11 |   1 |
| x11, X9  |   0 |
| x10      |   0 |
| x13      |   0 |
| x10      |   1 |
+-------+--------+

有人能建议怎么做吗?

您是希望按预期的方式投影数据,还是希望实际使用数据本身创建新列

首先循环行并根据您的条件创建映射列_code,X10映射。 当没有此类列时,创建新列x10。 c、 执行(“alter table processed_data add列'x10''整数'default 0”)


对列代码X10执行更新查询。

是否要按预期投影数据,还是实际使用数据本身创建新列

首先循环行并根据您的条件创建映射列_code,X10映射。 当没有此类列时,创建新列x10。 c、 执行(“alter table processed_data add列'x10''整数'default 0”)


对列代码X10执行更新查询。

只需获得您要求的结果,而不实际创建列,请使用

select *, codes like 'x10' from codes;

为了得到您要求的结果,而不实际创建列,请使用

select *, codes like 'x10' from codes;

您首先需要更改
处理的\u数据
表以添加
X10
列,然后可以基于
code
字段更新
X10
字段。例如:

cursor = connection.cursor()  # fetch a cursor from your SQLite connection

# let's first check if we already have the X10 column in our table
x10_exists = False
cursor.execute("PRAGMA table_info(processed_data)")  # get info on the table
for column in cursor:
    if column[1] == 'X10':
        x10_exists = True
        break
if not x10_exists:  # if X10 doesn't exist...
    cursor.execute("ALTER TABLE processed_data ADD COLUMN X10")  # add the X10 column

cursor.execute('''
    UPDATE processed_data
    SET X10=CASE
        WHEN codes LIKE 'X10' THEN 1
        ELSE 0
    END
''')  # update the values

db.commit()  # commit the transaction

您首先需要更改
处理的\u数据
表以添加
X10
列,然后可以基于
code
字段更新
X10
字段。例如:

cursor = connection.cursor()  # fetch a cursor from your SQLite connection

# let's first check if we already have the X10 column in our table
x10_exists = False
cursor.execute("PRAGMA table_info(processed_data)")  # get info on the table
for column in cursor:
    if column[1] == 'X10':
        x10_exists = True
        break
if not x10_exists:  # if X10 doesn't exist...
    cursor.execute("ALTER TABLE processed_data ADD COLUMN X10")  # add the X10 column

cursor.execute('''
    UPDATE processed_data
    SET X10=CASE
        WHEN codes LIKE 'X10' THEN 1
        ELSE 0
    END
''')  # update the values

db.commit()  # commit the transaction


您只是想以这种方式选择数据,还是真的想更改表?我想更改表,以便有一个新列,在本例中,这将是“X10”,您只是想以这种方式选择数据,还是真的想更改表?我想更改表,以便有一个新列,在本例中,这将是“X10”,前提是我正确理解您的问题,我想将包含新列的完整表导入Python。我不担心将其存储在数据库中,因为代码会发生变化。如果我正确理解您的问题,我想将包含新列的完整表导入Python。我不担心将其存储在数据库中,因为代码会发生变化。我知道你也想创建列,我认为其他人正在帮助你。我知道你也想创建列,我认为其他人正在帮助你。首先检查是否存在列x10,然后执行alter table。谢谢!我添加了%X10%,以防有人使用它作为参考,因为代码中有一些字符串column@avocet-关于更改已经更改的表,我在更改之前添加了一个检查X10列是否存在。它不会再出现你的错误了。很好的补充。想知道这个列是否可以是动态的。i、 e.搜索数据库中的所有列以查找X10匹配项?@avocet-好的,您可以从技术上使用
PRAGMA
查询来获取所有列,然后构建
UPDATE
案例以检查所有列。首先检查是否存在列X10,然后执行alter table。谢谢!我添加了%X10%,以防有人使用它作为参考,因为代码中有一些字符串column@avocet-关于更改已经更改的表,我在更改之前添加了一个检查X10列是否存在。它不会再出现你的错误了。很好的补充。想知道这个列是否可以是动态的。i、 e.搜索数据库中的所有列以查找X10匹配?@avocet-好的,您可以从技术上使用
PRAGMA
查询来获取所有列,然后构建
UPDATE
案例以检查所有列。