[英]Python Sqlite3 TypeError: 'NoneType' object is not subscriptable
[英]Python/sqlite3 function compare : TypeError: 'NoneType' object is not subscriptable
我是新來的,有人可以幫幫我。 我正在開發一個組件比較器 webapp,第一頁正常工作,但是當我點擊“比較”(這將啟動 function 並顯示頁面)時,我只看到了“正文”,而不是 function 會做什么。 服務器不顯示錯誤消息。 當我嘗試在 VsCode 中手動啟動 function 時,出現此錯誤:
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()
您可以通過一次查詢獲取所有值,當值的數量不重要時,獲取的數據庫越少越好。
當您獲取一個屬性時,對於一行,您使用 used fetchone()[0]
for: first row first field
現在您獲取多個屬性,對於多行數據是這樣的
[[450, 4, 8, 16] [550, 8, 1, 17]]
connexion = sqlite3.connect("composants.db")
cursor = connexion.cursor()
cursor.execute("PRAGMA foreign_keys = ON")
cursor.execute(
'SELECT prixProc, coeursProc, threadsProc, gravProc FROM Processeur WHERE nomProc=? OR nomProc=?;',
(processeur1, processeur2))
results = cursor.fetchall()
cursor.close()
connexion.close()
pagedebut = ''' '''
pagefin = ''' '''
def maxItem(values, index):
return max(values, key=lambda x: x[index])[index]
def minItem(values, index):
return min(values, key=lambda x: x[index])[index]
def compareProc(values):
# min prixProc
reponse = str(minItem(values, 0)) + " / "
# max coeursProc
reponse += str(maxItem(values, 1)) + " / "
# max threadsProc
reponse += str(maxItem(values, 2)) + " / "
# min gravProc
reponse += str(minItem(values, 3))
return pagedebut + reponse + pagefin
print(compareProc(results))
不要print(method())
如果method
沒有返回任何東西,它會打印默認返回值的None
,要么做
method()
# OR the method must 'return' something
print(method())
以下 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.