Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 选择带有为NULL和值的查询_Python_Sql_Python 3.x_Postgresql - Fatal编程技术网

Python 选择带有为NULL和值的查询

Python 选择带有为NULL和值的查询,python,sql,python-3.x,postgresql,Python,Sql,Python 3.x,Postgresql,我是PostgreSQL的初学者,这对我来说是一个关键问题 我的桌子看起来像这样: test num_1 num_2 0 1 1 1 2 我的数据库中有几列的值为NULL或非NULL。我想只使用一个查询读取test,该查询可以接受空值和非空值 查询应具有以下功能: 第一个问题: x = 1 sql = ("""SELECT test FROM table WHERE num_1 = %s""") df = pd.read_sql(sql, con = db, params = (

我是PostgreSQL的初学者,这对我来说是一个关键问题

我的桌子看起来像这样:

test num_1 num_2
0    1     1
1
2
我的数据库中有几列的值为NULL或非NULL。我想只使用一个查询读取
test
,该查询可以接受空值和非空值

查询应具有以下功能:

第一个问题:

x = 1
sql = ("""SELECT test FROM table WHERE num_1 = %s""")
df = pd.read_sql(sql, con = db, params = (x))
它应该返回0

第二个问题:

x = None
sql = ("""SELECT test FROM table WHERE num_1 IS NULL""")
df = pd.read_sql(sql, con = db, params = (x))
它应该返回
1,2

如何仅使用一个查询就能实现这一点?我尝试了以下代码,但无法正常工作:

x = None
sql = ("""SELECT test FROM table WHERE num_1 = %s or num_1 IS NULL """)
df = pd.read_sql(sql, con = db, params = (x))
它返回
0,1,2
。我相信这是因为查询中的“或”。我希望只有一个查询可以处理或接受NULL或a值

如果我查询NULL,它应该返回
1,2
,如果我查询
1
,它应该返回
0
。我不想要
0,1,2

这种情况就像
=
将NULL视为正常值:

SELECT test FROM table WHERE num_1 IS NOT DISTINCT FROM %s
缺点是这种情况不能使用索引

如果需要使用索引,可以编写

SELECT test FROM table WHERE num_1 = %s
UNION ALL
SELECT test FROM table WHERE num_1 IS NULL AND %s IS NULL

你的实际预期产出是多少?您的第三个查询正在按预期工作。我希望同一个查询接受None并给我1,2,否则它应该接受1并返回0。我不知道如何根据输入更改查询。如果你想让我进一步澄清,请让我知道。谢谢这对我来说毫无意义。您想匹配NULL还是1?我只想编写一个查询,可以处理NULL和1。我将在循环中使用相同的查询。例如,如果我给NULL,那么我希望我的数据库返回匹配的列值。如果输入是1,那么我应该从数据库中获取0。因为我在查询中使用了“or”,所以它返回0,1,2。使用or的替代方法是什么?您需要
没有区别,而不是
=
,它可以处理空值和非空值: