我试图根据sql count rows查询的结果执行if then语句。查询返回正确的值,但if / then语句似乎忽略了sql语句的返回值。
这是我的代码。
import sqlite3
# Define SQL statement to select all Data from Column Name
sql = "SELECT Count(*) FROM arbtable WHERE Name = ?"
book_name = 'Winged Coat'
class PriceCheck(object):
def __init__(self, db):
self.conn = sqlite3.connect(db)
self.c = self.conn.cursor()
def query(self, arg, cardname):
self.c.execute(arg, cardname)
return self.c
def __del__(self):
self.conn.close()
def display():
#Connect To DB and Get Price of Matched book.
getbookprice = PriceCheck("arbbase.sqlite")
for row in getbookprice.query(sql, ([book_name])):
if row == 0:
print 'no row was found'
else:
print 'Yep its there!'
print row
display()
这里的程序就是我的结果,正如" print row"在代码的底部是0.因为根据我的if语句它是零,它应该打印'没有找到行',而是它打印else语句值'是的! '
我已经进行了广泛的研究,并认为可能fetchone语句可能是我需要的,但我似乎无法弄清楚如何正确地将其应用于我的代码来测试它。
任何帮助都将受到高度赞赏。
酸杰克
答案 0 :(得分:0)
首先尝试一个独立的python程序来测试你是否能够检索该值,然后根据你的要求进行重构:
import sqlite3
conn = sqlite3.connect('arbbase.sqlite')
curs = conn.cursor()
curs.execute("SELECT Count(*) FROM arbtable WHERE Name = ?",('Winged Coat'))
rows = curs.fetchall()
for row in rows:
print row[0]
答案 1 :(得分:0)
查询SELECT COUNT(...) FROM ...
始终*返回单行。
该行包含计算的行数。
这个数字可能为零,但它仍然是一行中包含的数字。
要检查COUNT()的结果,您必须检查此值:
for row in curs.execute("SELECT COUNT(..."):
if row[0] == 0:
print 'no row was found'
else:
print 'There are {} rows with this name'.format(row[0])
(使用for
获取单行可能不是非常直观。您可以改用row = curs.fetchone()
。)
*除了使用GROUP BY