gpt4 book ai didi

python - 创建具有 REAL 值(包括 UNIQUE 约束)的 SQLITE 表的最佳方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 20:07:27 24 4
gpt4 key购买 nike

我试图了解处理 SQLITE3 中 float 比较的最佳方法。一般来说,我知道测试 float 是否相等是一种不好的做法。但是,我不确定如何在 SQLITE 关系数据库中执行此操作。

对表中的行使用 UNIQUE 约束(根据定义)是测试相等性。那么,在使用 REAL 数据类型时这是一个不好的做法吗?

如果我想选择唯一的行,只知道真实值,我应该怎么做?

我在 SQLITE3 中有下表:

CREATE TABLE nodes(
node_id INTEGER PRIMARY KEY,
node_number INTEGER,
x REAL,
y REAL,
z REAL,
UNIQUE(node_number, x, y, z)
);

对于表插入,我执行以下操作:

INSERT OR IGNORE INTO
nodes(node_number, x, y, z)
VALUES
(?, ?, ?, ?);

为了查找node_id(用于后续插入),我执行以下操作:

SELECT
node_id
FROM
nodes
WHERE
node_number = ?
AND
x = ?
AND
y = ?
AND
z = ?;

最佳答案

在 SQLite 中,CHECK 约束不能有子查询,因此如果您想在 SQLite 本身中执行邻近检查,则必须使用触发器,例如:

CREATE TRIGGER notequal
BEFORE INSERT ON test
BEGIN
SELECT CASE
WHEN (EXISTS (SELECT r FROM test WHERE abs(NEW.r - r) < 0.1))
THEN RAISE (ABORT,'Value too close to an existing value')
END;
END;

当然,您也希望更新具有相同的功能。

关于python - 创建具有 REAL 值(包括 UNIQUE 约束)的 SQLITE 表的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58902143/

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