Python/sqlite3函数比较:TypeError:“非类型”对象不可下标

Python/sqlite3函数比较:TypeError:“非类型”对象不可下标,python,database,function,sqlite,web-applications,Python,Database,Function,Sqlite,Web Applications,我是新来的,谁能帮帮我吗。我正在开发一个components comparator webapp,第一个页面正常工作,但当我单击“compare”启动函数并显示页面时,我只看到“body”,而不是函数的功能。服务器未显示错误消息。当我尝试在VsCode中手动启动函数时,出现以下错误: aprixProc1 = connexion.execute('SELECT prixProc FROM Processeur WHERE nomProc=(?);',(processeur1,)).fetchon

我是新来的,谁能帮帮我吗。我正在开发一个components comparator webapp,第一个页面正常工作,但当我单击“compare”启动函数并显示页面时,我只看到“body”,而不是函数的功能。服务器未显示错误消息。当我尝试在VsCode中手动启动函数时,出现以下错误:

aprixProc1 = connexion.execute('SELECT prixProc FROM Processeur WHERE nomProc=(?);',(processeur1,)).fetchone()[0] 
TypeError: 'NoneType' object is not subscriptable
这是我的密码:

import sqlite3
import cgi

formulaire = cgi.FieldStorage()
processeur1 = formulaire.getvalue('proc1')
processeur2 = formulaire.getvalue('proc2')

connexion = sqlite3.connect("composants.db")
connexion.execute("PRAGMA foreign_keys = ON")

#Recupere le prix de proc1 et proc2  
aprixProc1 = connexion.execute('SELECT prixProc FROM Processeur WHERE nomProc=(?);'(processeur1,)).fetchone()[0]
aprixProc2 = connexion.execute("SELECT prixProc FROM Processeur WHERE nomProc=(?);" (processeur2,)).fetchone()[0]


#Recupere le nb de coeurs de proc1 et proc2  
anbCoeurs1 = connexion.execute("SELECT coeursProc FROM Processeur WHERE nomProc=(?)", (processeur1,)).fetchone()[0]  
anbCoeurs2 = connexion.execute("SELECT coeursProc FROM Processeur WHERE nomProc=(?)",(processeur2,)).fetchone()[0]

#Recupere le nb de threads de proc1 et proc2  
athreadsProc1 = connexion.execute("SELECT threadsProc FROM Processeur WHERE nomProc=(?)",(processeur1,)).fetchone()[0]  
athreadsProc2 = connexion.execute("SELECT threadsProc FROM Processeur WHERE nomProc=(?)",(processeur2,)).fetchone()[0]  

#Recupere la taille de gravure de proc1 et proc2  
agravProc1 = connexion.execute("SELECT gravProc FROM Processeur WHERE nomProc=(?)",(processeur1,)).fetchone()[0]  
agravProc2 = connexion.execute("SELECT gravProc FROM Processeur WHERE nomProc=(?)",(processeur2,)).fetchone()[0]




pagedebut = '''
<html>
<head>

    <link rel="preconnect" href="https://fonts.gstatic.com">
    <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@600&display=swap" rel="stylesheet">
    <title> Components Stock Tracker </title>
    <link rel='stylesheet' href="css/fichier_css_html.css"/>
</head>

<body>
    <div class="entete">
        <p class='phead'>Components Stock Tracker</p>
        <img src ="images/logo_cst.jpg">
    </div>

    <div class="main">

'''

pagefin='''
</div>

    <div class="footer">
        <p class="texteFooter">
        Pied de Page <br> Crédits: Baptiste Lecerf </br>
        </p>
    </div>
</body>
</html> 
'''

def compareProc(prixProc1, prixProc2, nbCoeurs1, nbCoeurs2, threadsProc1, threadsProc2, gravProc1, gravProc2):    
reponse = ''  
if prixProc1 < prixProc2:  
    reponse += str(prixProc1)  
else:  
    reponse+= str(prixProc2)  
if nbCoeurs1 < nbCoeurs2:  
    reponse+= str(nbCoeurs2)  
else:  
    reponse+= str(nbCoeurs1)  
if threadsProc1 < threadsProc2:  
    reponse+= str(threadsProc2)  
else:  
    reponse+= str(threadsProc1)  
if gravProc1 < gravProc2:  
    reponse+= str(gravProc1)  
else:  
    reponse+= str(gravProc2)  

print(pagedebut+reponse+pagefin)

print(compareProc(aprixProc1, aprixProc2, anbCoeurs1, anbCoeurs2, athreadsProc1, athreadsProc2, agravProc1, agravProc2))  
connexion.close()

您可以通过一个查询获取所有值,如果值的数量不重要,则获取的DB越少越好

获取一个属性时,对于一行,使用used fetchone[0]表示:第一行第一个字段

现在获取多个属性,因为多行数据如下

[[450, 4, 8, 16]
 [550, 8, 1, 17]] 
Don't printmethod如果该方法不返回任何内容,它将不打印默认返回值所做的任何内容

方法 或者该方法必须“返回”某些内容 打印方法 以下SQL查询可用于

'SELECT prixProc, coeursProc, threadsProc, gravProc FROM Processeur WHERE nomProc in (?, ?);'

我尝试了这个代码和其他一些东西,但我总是得到“[0,]”

有括号吗?或者没有它也是一样的

import sqlite3
import cgi

formulaire = cgi.FieldStorage()
#processeur1 = formulaire.getvalue('proc1')
processeur1 = "R5-3600"
#processeur2 = formulaire.getvalue('proc2')
processeur2 = "I9-10900K"

conn = sqlite3.connect("composants.db")
cursor = conn.cursor()
conn.execute("PRAGMA foreign_keys = ON")


sql = "select exists(SELECT prixProc, coeursProc, threadsProc, gravProc FROM Processeur WHERE nomProc= (?) OR nomProc= (?))"
args = (processeur1, processeur2)
cursor = conn.execute(sql, args)
results = cursor.fetchall()


pagedebut ='''

'''    

pagefin ='''    

'''

print(results)

这不是你们从数据库中获取结果的方式,你们读过至少一本关于如何做的图图吗?这回答了你的问题吗?也不要为获取同一行的一个属性而执行4个请求,在一个请求中检索从Processurer选择prixProc、CoeurProc、threadsProc、gravProc,其中nomProc=@azro是,但我如何在之后比较每个属性?无论检索多少个属性,或检索多少行,所有数据都在结果中,如果没有1个元素的列表,而是有多个元素的列表,请尝试您的代码,在之前添加以下内容:import sqlite3 import cgi formulaire=cgi.FieldStorage processeur1=formulaire.getvalue'proc1'processeur2=formulaire.getvalue'proc2',它无论如何都不起作用。PS:我是初学者,这里有一个错误:testCompareProc.py,第70行,在printcompareProcresults testCompareProc.py,第60行,在compareProc reponse=strminItemvalues中,0+/testCompareProc.py,第56行,在minItem return minvalues中,key=lambda x:x[index][index]ValueError:min arg是一个空序列也许我应该向您详细解释我的项目,我正在开发一个webapp,每个组件的主页被分成4个部分,我使用了一个php下拉菜单来显示示例处理器,用户选择2,然后单击compare并启动此功能。当您单击它应该显示相同的标题和相同的页脚,在中间的字体应该返回,但我刚刚得到标题,页脚,没有中间的,即使你的功能,我试图打印结果与PraseSurr1= R5-3600和PraveSurr2= I9—10900K,这是我的数据库中的项目,但我得到一个空列表[]@VorTekS看到您可能删除了括号,我没有看到它,因为我只是复制了您的代码,请参见我对SQL查询的编辑
import sqlite3
import cgi

formulaire = cgi.FieldStorage()
#processeur1 = formulaire.getvalue('proc1')
processeur1 = "R5-3600"
#processeur2 = formulaire.getvalue('proc2')
processeur2 = "I9-10900K"

conn = sqlite3.connect("composants.db")
cursor = conn.cursor()
conn.execute("PRAGMA foreign_keys = ON")


sql = "select exists(SELECT prixProc, coeursProc, threadsProc, gravProc FROM Processeur WHERE nomProc= (?) OR nomProc= (?))"
args = (processeur1, processeur2)
cursor = conn.execute(sql, args)
results = cursor.fetchall()


pagedebut ='''

'''    

pagefin ='''    

'''

print(results)