gpt4 book ai didi

从具有空值的值列表更新时出现 postgresql 数据类型错误

转载 作者:行者123 更新时间:2023-11-29 12:10:01 25 4
gpt4 key购买 nike

当使用带参数元组的执行语句从值列表批量更新数据时,值列表中的空值被视为数据类型 varchar,因此在插入非 varchar 列时会导致问题,例如, double 。一个例子是:

create table mytable (mykey varchar, myvalue double precision);
cur.execute("""update mytable t set (myvalue)=(v.myvalue) from (values %s, %s) v (mykey, myvalue) where t.mykey = v.mykey""", ([('key1', None),('key2', None)]))

此查询的错误是:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
psycopg2.ProgrammingError: column "myvalue" is of type double precision but expression is of type text
LINE 1: update mytable t set (myvalue)=(v.myvalue) from (values ('ke...
^
HINT: You will need to rewrite or cast the expression.

如何在值列表中指定空值的数据类型?

最佳答案

说明非常清楚。您需要转换值:

. . .
set myvalue = (v.myvalue::double precision)

问题是 null 是无类型的,但列必须有类型。 Postgres 选择最通用的类​​型,您需要显式转换回数字。

关于从具有空值的值列表更新时出现 postgresql 数据类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41210663/

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