首页 > 解决方案 > 将每个参数转换为查询语句的问号

问题描述

我的意思是:

SELECT * FROM my_tab WHERE col1 = 'name1' AND col2 in(1,2,3);

如何得到这个:

SELECT * FROM my_tab WHERE col1 = ? AND col2 in(?,?,?);

pg_stat_statements做类似但它不保存原始(带参数)语句。我也需要原始查询。

可能有一些开源或正则表达式,这是什么?

标签: sqlpostgresqlparsing

解决方案


如果您可以访问 Python,您可以尝试:

sql = "SELECT * FROM my_tab WHERE col1 = 'name1' AND col2 IN (1,2,3);"
output = re.sub(r'\bIN\s*\((.*?)\)', lambda m: 'IN (' + re.sub(r'\w+', '?', m.group(1)) + ')', sql)
print(output)

这打印:

SELECT * FROM my_tab WHERE col1 = 'name1' AND col2 IN (?,?,?);

推荐阅读