使用 postgresql、python 和存储过程的日期时间
Datetime with postgresql, python, and a stored procedure
我有一个包含这一行的存储过程:
EXECUTE FORMAT('SELECT * FROM stores.paint WHERE created >= %s...
其中%s由参数填写:dt TIMESTAMP
.
我从 python 控制台调用它:
conn = psycopg2.connect(host=host, database=db, user=user, password=pass)
r = conn.cursor()
r.callproc('procedure_name', [datetime.datetime.now()])
由于日期时间/时间戳中的 space,我收到错误消息:
psycopg2.ProgrammingError: syntax error at or near "15"
LINE 1: ...* FROM stores.paint WHERE created >= 2015-02-21 15:20:40.2...
^
我试过在存储过程中使用单引号。这导致它在查询字符串中使用文字 %s
。
那么,如何将参数传递给其中包含 space 的存储过程,以便查询真正起作用?
用单引号转义字符串以使其正确 SQL:
FORMAT('... created >= ''%s'' ...')
在 PostgreSQL format()
函数中使用 %L
而不是 %s
作为占位符。阅读文档。
EXECUTE FORMAT('SELECT * FROM stores.paint WHERE created >= %L', dt);
最好不要在 format()
中填写占位符值,而是使用 EXECUTE ... USING
EXECUTE 'SELECT * FROM stores.paint WHERE created >= ' USING dt;
我有一个包含这一行的存储过程:
EXECUTE FORMAT('SELECT * FROM stores.paint WHERE created >= %s...
其中%s由参数填写:dt TIMESTAMP
.
我从 python 控制台调用它:
conn = psycopg2.connect(host=host, database=db, user=user, password=pass)
r = conn.cursor()
r.callproc('procedure_name', [datetime.datetime.now()])
由于日期时间/时间戳中的 space,我收到错误消息:
psycopg2.ProgrammingError: syntax error at or near "15"
LINE 1: ...* FROM stores.paint WHERE created >= 2015-02-21 15:20:40.2...
^
我试过在存储过程中使用单引号。这导致它在查询字符串中使用文字 %s
。
那么,如何将参数传递给其中包含 space 的存储过程,以便查询真正起作用?
用单引号转义字符串以使其正确 SQL:
FORMAT('... created >= ''%s'' ...')
在 PostgreSQL format()
函数中使用 %L
而不是 %s
作为占位符。阅读文档。
EXECUTE FORMAT('SELECT * FROM stores.paint WHERE created >= %L', dt);
最好不要在 format()
中填写占位符值,而是使用 EXECUTE ... USING
EXECUTE 'SELECT * FROM stores.paint WHERE created >= ' USING dt;