我正在尝试使用查询标记我的表字段。
SELECT regexp_split_to_table(mytable.field_name, E'\\s+') from mytable limit 20;
当我从 psql shell 执行它时这有效但是当我这样做时:
from django.db import connection cursor=connection.cursor()
cursor.execute("SELECT regexp_split_to_table(mytable.field_name,E'\\s+')
FROM mytable LIMIT 20")
cursor.fetchall()
...它无法返回 token 。我做错了什么?
最佳答案
Django 将反斜杠视为元字符,并在双引号内进行解释。
因此,在字符串到达 PostgreSQL 服务器之前,一层 E'\\s+')
被剥离,它将看到 E'\\s+')
。转义字符串将导致 's+'
,这反过来将使 regexp_split_to_table()
在任意数量的 s
处拆分您的字符串,而不是非打印空间,字符类简写 \s
在正则表达式中代表。
将字符串中的反斜杠加倍以获得您想要的内容:E'\\\\s+')
:
"SELECT regexp_split_to_table(field_name, E'\\\\s+') FROM mytable LIMIT 20"
作为替代方案,为了避免反斜杠 \
的特殊含义出现问题,您可以使用 [[:space:]]
来表示相同的字符类:
"SELECT regexp_split_to_table(field_name, '[[:space:]]+') FROM mytable LIMIT 20"
关于regex - Django 。 PostgreSQL。 regexp_split_to_table 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8907041/