sql - 使用Python时如何在SQL查询中使用空字符串
问题描述
我有一个 PostgreSQL 查询,当我查找空字符串时无法正确执行。我试过用反斜杠转义单引号,我试过双引号,似乎没有任何效果。想法?我需要查找空字符串,因为当我的脚本在我的数据集中找到空字符串时,它并没有做我需要它做的事情。
this_query = """
copy(SELECT phone_number from mytable WHERE phone_number is not null and phone_number != '''' ORDER BY random() LIMIT 25)
to stdout csv header;
"""
如果没有空字符串短语 (phone_number != ''''),查询将在我执行时起作用:
THIS_COMMAND = "psql -h hostname -d dbname -c '{query}' > {file_name}"
command = THIS_COMMAND.format(query=this_query, file_name=a_file_name)
os.system(command)
ATTN:在查看了下面的答案后,我进行了实验,发现这可行:
phone_number != '\"'\"''\"'\"'
解决方案
有一些方法可以使用引号。
编辑:交叉引用这个 UNIX-shell 引用答案:对于 Python 和 sh/bash(大概),引号都需要转义。所以对于 sh 这需要是'"'"''"'"'
,但是"
对于 Python,字符需要转义,给出'\"'\"''\"'\"'
. 呸!
this_query = """
copy(SELECT phone_number from mytable WHERE phone_number is not null and phone_number != '\"'\"''\"'\"''\"'\"''\"'\"' ORDER BY random() LIMIT 25) to stdout csv header;
"""
但是要给出另一种方法,您是否考虑过检查character_length(phone_number) > 0
?
参考:https ://www.postgresql.org/docs/9.1/functions-string.html
例如:
SELECT phone_number FROM mytable WHERE phone_number IS NOT NULL AND character_length(phone_number) > 0
但也许清理数据更好?
UPDATE mytable SET phone_number = NULL WHERE character_length(trim(phone_number)) = 0;
推荐阅读
- javascript - javascript递归函数在使用调试器时返回数据,但没有返回未定义
- php - 如何在 Laravel Passport 令牌中添加自定义数据?
- reactjs - redux devtools 未显示状态
- java - Mono.fromCallable 与 Mono.fromSupplier
- javascript - 当我们使用 PC 浏览器时,如何在手机浏览器上获取位置数据
- python-3.x - Python pandas 按逻辑按过滤记录分组
- quic - 为什么 QUIC 没有标准的 API?
- sql - SQL:在另一列的函数中更改列的值
- java - 编译为 jar 时文档不起作用
- flutter - 垂直居中文本并与图像右对齐