【问题标题】:SQL code tin python that take input information获取输入信息的 SQL 代码 tin python
【发布时间】:2020-12-20 17:32:54
【问题描述】:

我有以下 Python 函数,它使用 SQL 代码并给出了特定的关键字来进行一些计算。如何重新定义此函数,使其向用户询问关键字,即关键字不必在 SQL 代码中预定义?

代码如下:

def proto(cursor):
    cursor.execute('select protein.accession, keyword from protein JOIN protein_keywords ON protein.accession=protein_keywords.accession JOIN species ON protein.species_id=species.species_id where keyword="Zytocin";')
    return cursor.fetchall()

根据答案编辑:

def zroto(cursor):
    cursor.execute('select latin AS ART, count(*) AS Antal from protein, species where species.species_id = protein.species_id group by species.species_id;')
    return cursor.fetchall()


def proto(cursor):
     sql = 'select protein.accession, keyword from protein JOIN protein_keywords 
     ON protein.accession=protein_keywords.accession JOIN species ON 
     protein.species_id=species.species_id where keyword = ?;'

     k=input('Enter the value of keyword')
     cursor.execute(sql,[k],)
     return cursor.fetchall()

def main(db_file):
    con, cur = get_connection(db_file)
    zroto_1 = zroto(cur)
    proto_1 = proto(cur)
    for row in zroto_1, proto_1:
        print(row)

【问题讨论】:

  • 我使用的是 sqlite3,对于 python 3.7,我在 Windows 计算机上使用 Spyder。
  • 使用cursor.execute(sql, ("Zytocin",))时只需将%s;替换为?
  • 那很好,但我想手动输入一个单词,例如“Zytocin”,然后在控制台中得到正确的输出。并不是说我必须在代码中已经输入这个词。我该怎么做?
  • 例如,如果我在控制台中输入 proto("Zytocin" ),我只会得到“AttributeError: 'str' object has no attribute 'execute'”。
  • 就像我更新了上面问题中的代码一样?

标签: python sql sqlite


【解决方案1】:

您将使用准备好的语句:

sql = 'select protein.accession, keyword from protein JOIN protein_keywords ON protein.accession=protein_keywords.accession JOIN species ON protein.species_id=species.species_id where keyword = %s;'
cursor.execute(sql, ("Zytocin",))
return cursor.fetchall()

【讨论】:

  • 好的,但我希望程序的用户手动写单词。例如,如果用户输入“zyto”,则不会发生任何事情,但如果您输入“Zytocin”,则应该打印正确的数据。
  • 我的意思是你可能应该能够输入任何单词,但只有例如“Zytocin”才会给出输出。此外,当我输入您的代码时,我只收到“OperationalError: near "%": syntax error"。
  • 查看编辑后的答案。我可以使用那个代码吗?
猜你喜欢
  • 2016-12-09
  • 2020-10-25
  • 2022-12-24
  • 2015-01-12
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
  • 2015-09-03
相关资源
最近更新 更多