如何使用Python 3和sqlite3正确检查数据库表中是否存在行?
这是我的原始代码:
cursor.execute("SELECT name, age FROM people WHERE pin=?", (pin, ))
name, age = cursor.fetchone() or ('', 0)
所以目前我用or ('', 0)
设置了默认值,我真的不喜欢这个。
有没有办法检查这个人是否已经存在?像这样(伪):
if cursor.exists("pin IN people"):
cursor.execute("SELECT name, age FROM people WHERE pin=?", (pin, ))
name, age = cursor.fetchone()
答案 0 :(得分:3)
别打电话给fetchone()
;只需将游标视为迭代器:
for row in c.execute("SELECT name, age FROM ..."):
name, age = row
break
else:
print("not found")
答案 1 :(得分:2)
这样的东西?
vals = cursor.execute("SELECT name, age FROM people WHERE pin=?", (pin, )).fetchone()
if vals:
name, age = vals
答案 2 :(得分:1)
您可以使用计数查询:
if c.execute("SELECT count(*) FROM people WHERE pin=?", (pin, )).fetchone()[0] > 0:
...
答案 3 :(得分:0)
或者,如果您的表格很大,您可以使用EXISTS
来验证查询,并且您可以使用pin
上的索引受益,请查看此SO,这样您就可以:
c = cursor.execute("""SELECT EXISTS (SELECT 1
FROM people
WHERE pin=?
LIMIT 1)""", (pin, )).fetchone()[0]
if c:
...
光标将返回(1,)
(如果返回1行或更多行)或(0,)
(如果返回无),c
将1/0
为fetchone()[0]
将从上面获取整数值1/0
。
Exists
可能会更高效,具体取决于您的表格大小,以及您在查询字段上是否设置了索引。