gpt4 book ai didi

sqlite - 在 sqlite3 中切换值

转载 作者:行者123 更新时间:2023-12-03 15:55:30 25 4
gpt4 key购买 nike

我的表有一个名为 status 的列,数据类型为 CHARACTER。我希望执行以下操作。

If a row does not exists for a primary key, insert 'active' in status. If a row already has an entry for a primary key, toggle the status. Use ative, not_active values for toggling.

目前我正在通过编写多个查询来做到这一点。有没有像 Mysql 这样的单一查询?

最佳答案

SQLite 没有像 IF 这样的控制逻辑命令,因为这在嵌入式数据库中没有意义。

以您用来访问数据库的任何语言实现控制逻辑:

db.begin_transaction()
result = db.execute("SELECT status FROM MyTable WHERE id = ?", [id]);
if result.length > 0:
new_status = if result[0][0] == 'active': 'not_active' else: 'active'
db.execute("UPDATE MyTable SET status = ? WHERE id = ?", [new_status, id])
else:
db.execute("INSERT INTO MyTable(id, status) VALUES(?, ?)", [id, 'active'])
db.commit()

但是,切换逻辑本身可以用 CASE expression 来实现,所以如果你不太在意清晰度,你可以执行以下两个命令,按照这个顺序(如果记录不存在,UPDATE 将不执行任何操作,而 INSERT OR IGNORE如果新记录违反任何唯一约束,则什么都不做):

UPDATE MyTable
SET status = CASE status
WHEN 'active' THEN 'not_active'
ELSE 'active'
END
WHERE id = ?;

INSERT OR IGNORE INTO MyTable (id, status) VALUES (?, 'active');

关于sqlite - 在 sqlite3 中切换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13504365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com