if / then语句和sql计数行

时间:2015-04-30 02:55:00

标签: sqlite python-2.7

我试图根据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语句可能是我需要的,但我似乎无法弄清楚如何正确地将其应用于我的代码来测试它。

任何帮助都将受到高度赞赏。

酸杰克

2 个答案:

答案 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