我正在使用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
时中止事务。
答案 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注入攻击中的漏洞。