使用psycopg2调用postgres函数,该函数接受自定义类型的数组

Chimmy

我目前在postgres中有一个自定义类型:

create type times_type as
(
  start varchar,
  end   varchar,
  rate real
);

我也有一个函数,它需要一个times_type数组:

create function insert_data(times_values times_type[])

当我使用命名元组并使用callproc一次插入一个值时,它运行良好,即:

 Document = namedtuple('times_type', 'start 
                             end rate')


 cur.callproc('insert_data',
                     (Document('13:00', '16:00', 12.56))

但是现在函数正在期待一个数组,所以我尝试了:

Document = namedtuple('times_type', 'start 
                             end rate')


 cur.callproc('insert_data',
                     ([Document('13:00', '16:00', 12.56),
                       Document('17:00', '18:00', 12.56),
                       Document('19:00', '20:00', 12.56)])

psycopg2给我一个错误,该函数不存在。处理自定义类型数组时,您需要做些什么吗?

克林

复合类型数组的问题在于必须显式地转换它们,否则Postgres会将其视为record[]使用register_adapter(class, adapter)

Document = namedtuple('times_type', 'start end rate')

class DocumentAdapter:
    def __init__(self, x):
        self.adapted = psycopg2.extensions.SQL_IN(x)
    def prepare(self, conn):
        self.adapted.prepare(conn)
    def getquoted(self):
        return self.adapted.getquoted() + b'::times_type'

psycopg2.extensions.register_adapter(Document, DocumentAdapter)

cur.callproc('insert_data',
                     ([Document('13:00', '16:00', 12.56),
                       Document('17:00', '18:00', 12.56),
                       Document('19:00', '20:00', 12.56)],)) # comma added, this should be a tuple

conn.commit();  # dont forget to commit

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

psycopg2 / SQLAlchemy:使用自定义类型数组参数执行函数

datetime.strptime不接受自定义函数传递的参数

[]fs.FileInfo 无法作为接受自定义接口的函数参数传入

如何接受自定义输入

在函数“ onSubmit”中调用React Hook,该函数既不是React函数组件也不是自定义的React Hook函数

在函数“ appBar”中调用React Hook“ useStyles”,该函数既不是React函数组件也不是自定义的React Hook函数

如何在Postgres C函数中将数组返回为具有自定义类型的数组?

在函数“ shoes”中调用React Hook“ useEffect”,该函数既不是React函数组件也不是自定义React Hook

在函数“ deviceStatus”中调用React Hook“ useState”,该函数既不是React函数组件也不是自定义React

在函数“ app”中调用React Hook“ useState”,该函数既不是React函数组件也不是自定义React

在Postgresql中找不到带有Psycopg2的自定义类型

使自定义数据类型的数组时调用哪个构造函数?

为什么接受自定义结构代替错误?

Android-接受自定义字符串

POSIXct不接受自定义来源

如何使用重写规则接受自定义GET变量

使用ACF更新/创建自定义帖子类型后,在Wordpress中调用函数

F#:使用自定义类型参数调用本机函数

Python CTYPE:在C中使用自定义类型调用函数

如何使用自定义类类型参数在 JNI 中调用 Java 函数

使用自定义类型定义多个同名函数

在使用自定义函数的自定义函数中调用公式

从自定义R包构建的函数调用将返回该函数较旧版本的结果

为数组创建构造函数并使用自定义类型填充它

定义和调用自定义函数

postgres:插入自定义类型的数组

使用psycopg2在postgres中调用CURRENT_TIMESTAMP()

如何使用C ++代码调用Matlab自定义函数

在 dplyr 中使用 {{}} 调用自定义函数