我需要确保表中的列中的值作为较大流程的一部分是唯一的。
我知道这个UNIQUE限制,但我想知道是否有更好的方法来进行检查。
我正在使用以下方式运行查询psycopg2,因此添加该标签,以防万一其中有可以帮助解决此问题的内容。
如果该列是唯一的,我可以添加一个约束。如果列不唯一,添加约束将返回错误。
如果已经存在同名的约束,则会返回有用的错误。在这种情况下,宁愿只检查现有的约束。
如果该列是主键,则可以添加唯一约束而不会出现错误,但在这种情况下,最好仅根据主键认识到该列必须是唯一的。
下面的代码示例。
DROP TABLE IF EXISTS unique_test;
CREATE TABLE unique_test (
pkey INT PRIMARY KEY,
unique_yes CHAR(1),
unique_no CHAR(1)
);
INSERT INTO unique_test (pkey, unique_yes, unique_no)
VALUES(1, 'a', 'a'),
(2, 'b', 'a');
CREATE UNIQUE INDEX CONCURRENTLY u_test_1 ON unique_test (unique_yes);
ALTER TABLE unique_test
ADD CONSTRAINT unique_target_1
UNIQUE USING INDEX u_test_1;
-- the above runs no problem
-- check what happens when column is not unique
CREATE UNIQUE INDEX CONCURRENTLY u_test_2 ON …Run Code Online (Sandbox Code Playgroud) 我有一个数据结构,当我用谷歌搜索时,rstudio 将其识别为“命名数字”,结果谈论命名向量,但我没有看到提及命名数字。它们是一样的吗?
思考这个问题的最佳方式是什么?它是一本字典吗?两个列表的列表?
我的目标是按数字排序,然后按大小顺序获取名称。
print(my_named_number)
Baker Street Charing Cross Edgware Road (B) Elephant & Castle
8.420070e-04 9.403936e-01 3.732567e-05 4.620485e-03
Embankment Harlesden Harrow & Wealdston Kensal Green
1.000000e+00 1.566635e-12 1.623611e-17 3.082285e-10
Run Code Online (Sandbox Code Playgroud)
抱歉,这是不可重现的,我不知道如何构建命名数字,并且我正在使用的数据是由返回的列表的向量部分igraph:eigen_centrality(igraph_object)
编辑:
str(my_named_number)
Named num [1:4] 8.42e-04 9.40e-01 3.73e-05 4.62e-03
- attr(*, "names")= chr [1:4] "Baker Street" "Charing Cross" "Edgware Road (B)" "Elephant & Castle"
Run Code Online (Sandbox Code Playgroud) 如果我运行:
r_2 = 0.89 # (wow that's an impressive R^2)
rmse = 24724.58
cat("R^2: ", r_2, '\n',"RMSE: ", rmse)
Run Code Online (Sandbox Code Playgroud)
在RStudio控制台中,它返回:
R^2: 0.89
RMSE: 24724.58
Run Code Online (Sandbox Code Playgroud)
很明显为什么之前有多余的空间RMSE吗?
查看一些Leetcode问题,看到下面的求逆整数的解决方案
def reverse(self, x: int) -> int:
maxint = 2147483649
minint = -2147483648
ans = int(str(abs(x))[::-1])
return ans * (abs(x)//x) if minint < ans < maxint and ans else 0
Run Code Online (Sandbox Code Playgroud)
以为我可以通过替换变量minint和maxint使用值来显着提高速度。
def reverse(self, x: int) -> int:
ans = int(str(abs(x))[::-1])
return ans * (abs(x)//x) if -2147483648 < ans < 2147483649 and ans else 0
Run Code Online (Sandbox Code Playgroud)
(这个问题有点奇怪,因为它要求假设只有32位分配给一个整数,应该对它进行错误处理,而不是事后进行此奇怪的“检查”?)
第二个代码块在40毫秒内运行测试,而第一个代码块在28毫秒内运行。
为什么将变量用于if而不是值更快?