Python/sqlite3函数比较:TypeError:“非类型”对象不可下标
我是新来的,谁能帮帮我吗。我正在开发一个components comparator webapp,第一个页面正常工作,但当我单击“compare”启动函数并显示页面时,我只看到“body”,而不是函数的功能。服务器未显示错误消息。当我尝试在VsCode中手动启动函数时,出现以下错误: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
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)