根据SQLite中的条件创建列

时间:2017-12-08 15:11:18

标签: 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|    |
| x11, X9 |    |
| x10     |    |
| x13     |    |
+-------+------+

目标数据示例:

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

有人可以建议怎么做吗?

3 个答案:

答案 0 :(得分:2)

首先,您需要更改processed_data表格以添加X10列,然后您可以根据X10字段更新codes字段。例如:

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

答案 1 :(得分:0)

您是否希望按预期投影数据,或者您是否希望实际使用数据本身创建新列。

首先循环行并根据您的条件创建映射column_codes,X10映射。 没有这样的列时创建新列x10。 c.execute(" alter table processed_data add column' x10'' INTEGER'默认0")

执行column_codes,X10的更新查询。

答案 2 :(得分:0)

只是为了获得您提出的结果,而不实际创建列,请使用

select *, codes like 'x10' from codes;