使用 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")