如果在python上有Else条件

时间:2015-02-25 10:50:43

标签: python if-statement for-loop

我试图在for循环后放置一个条件。如果检索到的行不等于零,它将打印可用的单词,但是如果我要输入未存储在我的数据库中的值,它将返回一条消息。我的问题在于,如果我要输入未存储在我的数据库中的值,它将不会转到else语句。我是新手。在这个函数中我的错误是什么?

  def search(title):           
    query = "SELECT * FROM books WHERE title = %s"
    entry = (title,)

    try:
        conn = mysql.connector.connect(user='root', password='', database='python_mysql') # connect to the database server
        cursor = conn.cursor()

        cursor.execute(query, entry)
        rows = cursor.fetchall()

        for row in rows:
            if row != 0:
                print('Available')
            else:
                print('No available copies of the said book in the library')


    except Error as e:
        print(e)

    finally:
        cursor.close()
        conn.close()

def main():
    title = input("Enter book title: ")
    search(title) 

if __name__ == '__main__':
    main() 

3 个答案:

答案 0 :(得分:2)

除了0 / NULL混淆之外,你的逻辑是错误的。如果没有匹配的行,则不会获得0作为行的值;事实上,你根本不会获得任何行,你甚至都不会进入for循环。

更好的方法是运行COUNT个查询,使用fetchone()获取单个结果,然后直接检查。

query = "SELECT COUNT(*) FROM books WHERE title = %s"
entry = (title,)

try:
    conn = mysql.connector.connect(user='root', password='', database='python_mysql') # connect to the database server
    cursor = conn.cursor()

    cursor.execute(query, entry)
    result = cursor.fetchone()


    if result != 0:
        print('Available')
    else:
        print('No available copies of the said book in the library')

答案 1 :(得分:1)

在python中,您应该检查None而不是NULL。在您的代码中,您可以检查对象,如果它不是None,则控件应该进入if,否则else将被执行

for row in rows:
    if row:
        print('Available')
    else:
        print('No available copies of the said book in the library')

UPDATE after auther edited the question:

现在在for循环中,您应该检查列值而不是整个row。如果您的列名称为quantity,那么if语句应该是这样的

if row["quantity"] != 0:

答案 2 :(得分:1)

首先,python中的NULL称为None。 下一个: 根据文件: "该方法获取查询结果集的所有(或所有剩余)行,并返回元组列表。如果没有更多行可用,则返回空列表。 " enpty list不是None

>>> row = []
>>> row is None
False

所以你需要以这样的方式重新设计你的if语句:

for i in rows:
    if i:
        blah-blah
    else:
        blah-blah-blah