我试图在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()
答案 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