sql - 将每个参数转换为查询语句的问号
问题描述
我的意思是:
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
做类似但它不保存原始(带参数)语句。我也需要原始查询。
可能有一些开源或正则表达式,这是什么?
解决方案
如果您可以访问 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 (?,?,?);
推荐阅读
- sql - 提取列中的特定单词
- python - 具有多个输入属性的 LSTM,在 keras
- python-3.x - 获取按其他列值过滤的 datetimeindexed 数据帧中当天的最后一个值
- c# - 在不同的类中实现接口签名如何知道使用哪一个
- python - Binaryproto 平均大小不同于 cnn 大小
- ios - 如果我不通过 App Store 分发我的应用程序,我如何注册应用程序方案以获得深度链接?
- android - Picasso - 回调,指示从 Web 加载的位图
- php - 错误:非对象的属性
- angular - 从 url 检索正确日期的问题
- java - HttpURLConnection 错误:HTTP 方法 PATCH 无效