【问题标题】:Regex like syntax in SQL query pythonSQL查询python中的正则表达式语法
【发布时间】:2019-12-08 09:13:25
【问题描述】:

我有一些代码我必须再次编写才能为生产做好准备。代码很乱,我有几行表示sql查询,但我无法解析确切的语句。

qs = 'DEVICENAME1|DEVICENAME2|DEVICENAME3'

qstring='SELECT "lat", "lon", "device", "location" FROM "locations" WHERE ("device" =~ /^('+qs+')/) AND time > now()-60h'

qstring='SELECT "device", "lat" FROM "locations" WHERE ("location"=~ /^'+loc+'$/) AND time > now()-60h'

如果有人能为我解析 sql 查询语句,我将不胜感激。需要明确的是,我对这些部分感兴趣: ("device" =~ /^('+qs+')/) ("location"=~ /^'+loc+'$/)

【问题讨论】:

  • 您使用的是哪个数据库?请在您的问题中添加相关标签。
  • influxdb python。我添加了标签。

标签: python sql regex influxdb influxdb-python


【解决方案1】:

概念上,"device" =~ /^('+qs+')/的意思是:检查以qs开头的设备(^代表字符串的开头),"location"=~ /^'+loc+'$/检查位置是否等于loc$是字符串的结尾)。

因此,几乎在任何数据库中,这些条件都可以在不使用正则表达式的情况下重写:

"device" like ' + qs+ '%  -- influxdb does not support like
"location" = ' + loc + '

旁注:为了安全和效率,您应该在任何地方使用准备好的语句和参数化查询。由于您正在重写遗留代码,因此现在是这样做的好地方。

【讨论】:

  • 感谢您的回答。是的,我正在尝试重写整个代码。你能解释一下为什么变量前后都需要+字符吗?
  • + 是python(不是sql)中的字符串连接运算符。因此,我对准备好的语句的观点(我对 influxdb 不太了解,但它应该支持准备好的语句......)
【解决方案2】:

可以在文档中找到完整的解释: https://docs.influxdata.com/influxdb/v1.2/query_language/data_exploration/#syntax-15 Influxdb 支持 Golang 的正则表达式语法。

【讨论】:

    猜你喜欢
    • 2013-05-12
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    相关资源
    最近更新 更多