我正在尝试从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 |
+-------+--------+
有人可以建议怎么做吗?
答案 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;