gpt4 book ai didi

python - PostgreSQL UUID 日期类型

转载 作者:行者123 更新时间:2023-11-29 14:37:33 24 4
gpt4 key购买 nike

我正在使用 PostgreSQL 数据库构建平台(第一次),但我已经使用 Oracle 和 MySQL 数据库几年了。

我的问题是关于 Postgres 中的 UUID 数据类型。我正在使用 UUIDv4 uuid 来标识多个表中的记录,因此对/users/2df2ab0c-bf4c-4eb5-9119-c37aa6c6b172 的请求将响应具有该 UUID 的用户。我还有一个用于索引的自动递增 ID 字段。

我的查询只是一个 select,在 UUID 上有一个 where 子句。但是,当用户输入像这样的无效 UUID 2df2ab0c-bf4c-4eb5-9119-c37aa6c6b17(没有最后一个 2)时,数据库会响应此错误: UUID 的输入语法无效

我想知道为什么它会返回这个,因为当您在 integer-type 和 string-type 上select 时,它确实有效。

现在我需要在每个包含 UUID 类型参数的路由上设置一个中间件/检查,否则服务器会崩溃。

顺便说一下,我正在使用 Flask 0.12 (Python) 和 PostgreSQL 9.6

最佳答案

UUID as defined by RFC 4122, ISO/IEC 9834-8:2005... is a 128-bit quantity ... written as a sequence of lower-case hexadecimal digits... for a total of 32 digits representing the 128 bits. (Postgresql Docs)

没有从 31 位十六进制数字文本到 128 位 UUID 的转换(抱歉)。您有一些选择:

  1. 在您的查询中转换为::text(不推荐,因为您每次都会转换每一行)。

    SELECT * FROM my_table WHERE my_uuid::TEXT = 'invalid uid';
  2. 不要将其存储为 UUID 类型。如果您不想/不需要 UUID 语义,请将其存储为 varchar。
  3. 检查您的客户输入。 (我的建议)。从概念上讲,这与询问某人的年龄并得到“ABC”作为响应没有什么不同。

Postgres 允许大写/小写,并且可以灵活使用连字符,因此预检查只是去掉连字符、小写、计数 [0-9[a-f] & if == 32,你有一个可用的 UUID。否则,与其告诉用户“未找到”,不如告诉他们“不是 UUID”,这可能对用户更友好。

关于python - PostgreSQL UUID 日期类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42096970/

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