Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.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检查SQLite中是否存在行_Python_Sqlite - Fatal编程技术网

使用Python检查SQLite中是否存在行

使用Python检查SQLite中是否存在行,python,sqlite,Python,Sqlite,我想知道我的一个表中是否已经存在一行,在本例中为coll。为了做到这一点,我在shell中使用了SQLite,偶然发现SELECT EXISTSSELECT 1 FROM coll,其中ceeb=1234。在SQLite中,这非常有效,它返回0或1-这正是我想要的。因此,在手头有代码的情况下,我编写了一个快速的Python脚本,看看在将其插入程序之前是否可以让它为我工作。这就是我想到的: import sqlite3 conn = sqlite3.connect('stu.db') c = c

我想知道我的一个表中是否已经存在一行,在本例中为coll。为了做到这一点,我在shell中使用了SQLite,偶然发现SELECT EXISTSSELECT 1 FROM coll,其中ceeb=1234。在SQLite中,这非常有效,它返回0或1-这正是我想要的。因此,在手头有代码的情况下,我编写了一个快速的Python脚本,看看在将其插入程序之前是否可以让它为我工作。这就是我想到的:

import sqlite3

conn = sqlite3.connect('stu.db')
c = conn.cursor()

sceeb = int(raw_input(":> "))

ceeb_exists = c.execute('SELECT EXISTS(SELECT 1 FROM coll WHERE ceeb="%d" LIMIT 1)' % sceeb)

print ceeb_exists
它没有给ceeb_existsa 1或0赋值,而是给我一个如下的输出。我在这里做错了什么?

.executes返回一个游标对象,如您所见。 为了打印查询结果,您需要对其进行迭代:

for result in exists:
    print result
.executes返回您可以看到的游标对象。 为了打印查询结果,您需要对其进行迭代:

for result in exists:
    print result
查询的执行总是导致0行或更多行。你需要取那些行;SELECT查询结果存在于一行中,因此您需要获取该行

行总是由一个或多个列组成,这里有一个,因此可以使用元组分配注意,ceeb_存在后的逗号:

然而,在这里使用EXISTS查询有点多余;您可以测试是否返回了任何行。您还应该使用查询参数来避免SQL注入攻击,因为您正在要求用户为您提供ceeb值,因此很容易被劫持:

c.execute('SELECT 1 FROM coll WHERE ceeb=? LIMIT 1', (sceeb,))
ceeb_exists = c.fetchone() is not None
cursor.fetchone返回None如果没有可提取的行,则is not None测试会将其转换为True或False。

执行查询时始终会产生0行或更多行。你需要取那些行;SELECT查询结果存在于一行中,因此您需要获取该行

行总是由一个或多个列组成,这里有一个,因此可以使用元组分配注意,ceeb_存在后的逗号:

然而,在这里使用EXISTS查询有点多余;您可以测试是否返回了任何行。您还应该使用查询参数来避免SQL注入攻击,因为您正在要求用户为您提供ceeb值,因此很容易被劫持:

c.execute('SELECT 1 FROM coll WHERE ceeb=? LIMIT 1', (sceeb,))
ceeb_exists = c.fetchone() is not None

cursor.fetchone返回None如果没有可提取的行,is not None测试会将其转换为True或False。

这是可行的,但需要使用正则表达式或其他方法对数据进行一些清理,以使其可用。但我不知道关于光标对象,谢谢!这是可行的,但需要使用regex或其他工具对数据进行一些清理,以使其可用。但我不知道关于光标对象,谢谢!真是奇迹,谢谢!这只是我自己在工作中使用的,所以我不需要担心注入攻击。@IanPringle:使用查询参数总是一个很好的做法;它还使数据库驱动程序能够为该查询创建准备好的执行计划,并将其用于不同的参数,例如。非常好,谢谢!这只是我自己在工作中使用的,所以我不需要担心注入攻击。@IanPringle:使用查询参数总是一个很好的做法;例如,它还使数据库驱动程序能够为该查询创建准备好的执行计划,并将其用于不同的参数。