使用postgresql,python和存储过程的日期时间

时间:2015-02-21 15:23:16

标签: python postgresql stored-procedures psycopg2

我有一个包含以下行的存储过程:

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()])

由于日期时间/时间戳中的空格,我收到错误:

psycopg2.ProgrammingError: syntax error at or near "15" LINE 1: ...* FROM stores.paint WHERE created >= 2015-02-21 15:20:40.2... ^

我尝试在存储过程中使用单引号。这导致它在查询字符串中使用文字%s

那么,我如何将参数传递给其中有空格的存储过程,以便查询实际工作?

2 个答案:

答案 0 :(得分:1)

在PostgreSQL %L函数中使用%s代替format()作为占位符。阅读文档。

EXECUTE FORMAT('SELECT * FROM stores.paint WHERE created >= %L', dt);

更好的是,不要在format()中填充占位符值,而是使用EXECUTE ... USING

EXECUTE 'SELECT * FROM stores.paint WHERE created >= $1' USING dt;

答案 1 :(得分:0)

使用单引号转义字符串以使其成为正确的SQL:

FORMAT('... created >= ''%s'' ...')