Je suis très nouveau à travailler avec des requêtes SQL. Toutes les suggestions pour améliorer ce peu de code: (en passant, je ne me soucie vraiment pas de la sécurité sql ici, c'est un peu de code qui sera dans un fichier pyexe se connectant à un fichier local sqlite - donc il ne fait pas sens de s'inquiéter de la sécurité de la requête ici).Des recommandations pour améliorer cette fonction?
def InitBars(QA = "GDP1POP1_20091224_gdp", QB = "1 pork", reset = False):
global heights, values
D, heights, values, max, = [], {}, {}, 0.0001
if reset: GHolder.remove()
Q = "SELECT wbcode, Year, "+QA+" FROM DB WHERE commodity='"+QB+"' and "+QA+" IS NOT 'NULL'"
for i in cursor.execute(Q):
D.append((str(i[0]) + str(i[1]), float(i[2])))
if float(i[2]) > max: max = float(i[2])
for (i, n) in D: heights[i] = 5.0/max * n; values[i] = n
Gui["YRBox_Slider"].set(0.0)
Gui["YRBox_Speed"].set(0.0)
après avoir suivi les conseils, ce que je suis:
def InitBars(QA = "GDP1POP1_20091224_gdp", QB = "1 pork", reset = False):
global heights, values; D, heights, values, max, = [], {}, {}, 0.0001
if reset: GHolder.remove()
Q = "SELECT wbcode||Year, %s FROM DB WHERE commodity='%s' and %s IS NOT 'NULL'" % (QA, QB, QA)
for a, b in cursor.execute(Q):
if float(b) > max: max = float(b)
values[a] = float(b)
for i in values: heights[i] = 5.0/max * values[i]
Gui["YRBox_Slider"].set(0.0); Gui["YRBox_Speed"].set(0.0)
Ne pas se habituer à de mauvaises habitudes. Toujours soucieux de la sécurité. –
étant donné que sqlite3 fait partie de la bibliothèque standard de Python, vous devriez faire une meilleure raison pour ne pas utiliser ses requêtes paramétrées. –
le conseil était * pas * de mettre plusieurs déclarations dans la même ligne. ceci inclut le 'si 'et ses branches. – Amnon