检查结果是否已返回并分配给变量

时间:2015-08-28 04:04:17

标签: python postgresql error-handling psycopg2

我正在使用psycopg2。我发现我做了很多查询,但有时候没有返回结果。我该如何检查?当我尝试将查询中的值分配给结果时,我得到TypeError: 'NoneType' object is not subscriptable。解决这个问题,而不是

cur.execute(...)
result = cur.fetchone()
myVar = result[0]

我现在做

if result is not None:
    myVar = result[0]
else:
    myVar = None

这样try / except TypeError会在后者使用时捕获它。有一个更好的方法吗?这种情况很糟糕,因为现在当我使用值插回到db时,它只是在尝试插入None时中止事务。

1 个答案:

答案 0 :(得分:1)

当查询不产生任何行时,

cur.fetchone()返回None。您可以通过检查None来处理该问题,但是,您还应该在插入代码中检查None

如果将None插入列psycopg2有效,则会在适当时将None转换为SQL NULL。你可以这样做:

cur.execute("select * from blah where id=%s", (id,))
result = cur.fetchone()
myVar = result[0] if result is not None else None

# insert
cur.execute("insert into blah values (%(id)s, %(name)s)", {'id':100, 'name': None})
cur.execute("select * from blah where id=%s and name is NULL", (100,))
result = cur.fetchone()
myVar = result[0]
print myVar
# outputs None

我不确定您是否使用它们,但请注意参数化查询的使用有助于此,并且它也减少了应用程序在SQL注入攻击中的漏洞。