使用 python 和 fetchall() 从数据库匹配查询时遇到问题
Facing problem in matching query from database using python and fetchall()
我的数据库中有两个表,protein_complex代表一组蛋白质
这里是 nonprotein_complex 代表一组非蛋白质。
蛋白质和非蛋白质由它们的代码引用。
我写的 python 程序旨在从用户那里获取代码,它应该搜索两个数据库表并判断它属于蛋白质、非蛋白质还是两者都不属于。这是代码:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="root",
database="abdb"
)
while True:
ch = int(input("\n1.Search by code\n2.Search by species\n\nPlease choose an option "))
if ch==1:
log =input("Enter the code value for the respective protein\n")
mycursor = mydb.cursor(buffered=True)
mycursor.execute("SELECT * FROM protein_complex WHERE code_name='%s' ",log)
mycursor2 = mydb.cursor(buffered=True)
mycursor2.execute("SELECT * FROM nonprotein_complex WHERE name='%s' ",log)
rows1=mycursor.fetchall()
rows2=mycursor2.fetchall()
if rows1 is None:
if rows2 is None:
print("Not present")
else:
print("Non protein")
else:
print("protein")
但是,在输出中,每当我输入一个代码时,它只被归类为一种蛋白质。它永远不会进入 'non-protein' 或 'none' 部分。你能帮我看看为什么会这样吗?
这是输出:
因为 if 和 else 语句不能那样工作。如果第一个 if 语句为真,那么第二个甚至不会执行。这意味着在您的示例中 if rows1 is None:
并非如此,然后 else: print("protein")
将执行。在你的情况下,你在 else 语句中打印出的唯一东西是“蛋白质”,但没有别的。要实际打印两者,蛋白质与否,您必须在每个语句中打印“蛋白质”和“非蛋白质”(如果您总是想显示这两个结果)。
用下面的代码替换您的 if else 语句,然后它应该可以工作:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="root",
database="abdb"
)
while True:
ch = int(input("\n1.Search by code\n2.Search by species\n\nPlease
choose an option "))
if ch==1:
log =input("Enter the code value for the respective protein\n")
mycursor = mydb.cursor(buffered=True)
mycursor.execute("SELECT * FROM protein_complex",log)
mycursor2 = mydb.cursor(buffered=True)
mycursor2.execute("SELECT * FROM nonprotein_complex",log)
for row in mycursor:
if str(log) == str(row):
print("Protein")
else:
print("Not present")
for row in mycursor2:
if str(log) == str(row):
print("Nonprotein")
else:
print("Not present")
我的数据库中有两个表,protein_complex代表一组蛋白质
这里是 nonprotein_complex 代表一组非蛋白质。
蛋白质和非蛋白质由它们的代码引用。
我写的 python 程序旨在从用户那里获取代码,它应该搜索两个数据库表并判断它属于蛋白质、非蛋白质还是两者都不属于。这是代码:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="root",
database="abdb"
)
while True:
ch = int(input("\n1.Search by code\n2.Search by species\n\nPlease choose an option "))
if ch==1:
log =input("Enter the code value for the respective protein\n")
mycursor = mydb.cursor(buffered=True)
mycursor.execute("SELECT * FROM protein_complex WHERE code_name='%s' ",log)
mycursor2 = mydb.cursor(buffered=True)
mycursor2.execute("SELECT * FROM nonprotein_complex WHERE name='%s' ",log)
rows1=mycursor.fetchall()
rows2=mycursor2.fetchall()
if rows1 is None:
if rows2 is None:
print("Not present")
else:
print("Non protein")
else:
print("protein")
但是,在输出中,每当我输入一个代码时,它只被归类为一种蛋白质。它永远不会进入 'non-protein' 或 'none' 部分。你能帮我看看为什么会这样吗?
这是输出:
因为 if 和 else 语句不能那样工作。如果第一个 if 语句为真,那么第二个甚至不会执行。这意味着在您的示例中 if rows1 is None:
并非如此,然后 else: print("protein")
将执行。在你的情况下,你在 else 语句中打印出的唯一东西是“蛋白质”,但没有别的。要实际打印两者,蛋白质与否,您必须在每个语句中打印“蛋白质”和“非蛋白质”(如果您总是想显示这两个结果)。
用下面的代码替换您的 if else 语句,然后它应该可以工作:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="root",
database="abdb"
)
while True:
ch = int(input("\n1.Search by code\n2.Search by species\n\nPlease
choose an option "))
if ch==1:
log =input("Enter the code value for the respective protein\n")
mycursor = mydb.cursor(buffered=True)
mycursor.execute("SELECT * FROM protein_complex",log)
mycursor2 = mydb.cursor(buffered=True)
mycursor2.execute("SELECT * FROM nonprotein_complex",log)
for row in mycursor:
if str(log) == str(row):
print("Protein")
else:
print("Not present")
for row in mycursor2:
if str(log) == str(row):
print("Nonprotein")
else:
print("Not present")