首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用python和fetchall()匹配数据库查询时遇到的问题

使用python和fetchall()匹配数据库查询时遇到的问题
EN

Stack Overflow用户
提问于 2021-04-25 23:10:28
回答 1查看 35关注 0票数 1

我的数据库中有两个表,protein_complex表示一组蛋白质

这是代表一组非蛋白质的nonprotein_complex。

蛋白质和非蛋白质通过它们的密码来表示。

我写的python程序,目的是从用户那里获取代码,它应该搜索两个数据库表,并判断是否属于蛋白质,非蛋白质或两者都不属于蛋白质。代码如下:

代码语言:javascript
运行
复制
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")

然而,在输出中,每当我输入一个代码时,它只被分类为蛋白质。它永远不会进入“非蛋白质”或“无”部分。你能告诉我为什么会发生这样的事情吗?

下面是输出:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-25 23:15:26

因为if和else语句不是这样工作的。如果第一个If语句为真,那么第二个语句甚至不会执行。这意味着在您的示例中,如果if rows1 is None:不是这种情况,则将执行else: print("protein")。在您的示例中,在else语句中打印的唯一内容是"protein“,而不是其他内容。要实际打印蛋白质和非蛋白质,您必须在每个语句中打印“蛋白质”和“非蛋白质”(如果您总是想同时显示这两个结果)。

用下面的代码替换if else语句,那么它应该可以工作:

代码语言:javascript
运行
复制
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")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67254892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档