传入 cursor.callproc 的字符串变得未知(psycopg2、python 2.7、postgres 9.3)
String passed into cursor.callproc becomes unknown (psycopg2, python 2.7, postgres 9.3)
出于某种原因,将字符串从 Python 传递到 Postgres 函数并使用 psycopg2 游标调用它会导致函数无法识别,因为参数未知。
功能很简单,像这样:
CREATE OR REPLACE FUNCTION text_test (some_text text)
RETURNS void AS $$
BEGIN
END;
$$ LANGUAGE plpgsql;
在python这边,我有:
cursor.callproc("text_test", ("test",))
我收到以下错误:
psycopg2.ProgrammingError: function text_test(unknown) does not exist
LINE 1: SELECT * FROM text_test('test')
^
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
为什么这只发生在字符串上?我需要做什么才能让函数成功接受字符串?由于某些原因,数字数据类型不受此问题的影响。
发生这种情况是因为无法将字符串转换为 "correct" 文本类型。是 char(N)
吗?一个varchar(N)
?一个text
?
不幸的是 .callproc()
没有提供一种简单的方法来指定参数类型,但您始终可以使用 .execute()
显式转换参数并且一切正常:
curs.execute("SELECT * FROM text_test(%s::text)", ("test",))
您还可以列出需要发送的参数:
param_list = ["test"]
curs.callproc(proc_name, param_list)
这是一个很好的答案:
python + psycopg2 = unknown types?
出于某种原因,将字符串从 Python 传递到 Postgres 函数并使用 psycopg2 游标调用它会导致函数无法识别,因为参数未知。
功能很简单,像这样:
CREATE OR REPLACE FUNCTION text_test (some_text text)
RETURNS void AS $$
BEGIN
END;
$$ LANGUAGE plpgsql;
在python这边,我有:
cursor.callproc("text_test", ("test",))
我收到以下错误:
psycopg2.ProgrammingError: function text_test(unknown) does not exist
LINE 1: SELECT * FROM text_test('test')
^
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
为什么这只发生在字符串上?我需要做什么才能让函数成功接受字符串?由于某些原因,数字数据类型不受此问题的影响。
发生这种情况是因为无法将字符串转换为 "correct" 文本类型。是 char(N)
吗?一个varchar(N)
?一个text
?
不幸的是 .callproc()
没有提供一种简单的方法来指定参数类型,但您始终可以使用 .execute()
显式转换参数并且一切正常:
curs.execute("SELECT * FROM text_test(%s::text)", ("test",))
您还可以列出需要发送的参数:
param_list = ["test"]
curs.callproc(proc_name, param_list)
这是一个很好的答案: python + psycopg2 = unknown types?