首页 > 解决方案 > 使用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 != '\"'\"''\"'\"' 

标签: sqlpython-3.xpostgresql

解决方案


有一些方法可以使用引号。

编辑:交叉引用这个 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;

推荐阅读