je le code suivant:comment créer une instruction SQL dynamique w/python et mysqldb
def sql_exec(self, sql_stmt, args = tuple()):
"""
Executes an SQL statement and returns a cursor.
An SQL exception might be raised on error
@return: SQL cursor object
"""
cursor = self.conn.cursor()
if self.__debug_sql:
try:
print "sql_exec: " % (sql_stmt % args)
except:
print "sql_exec: " % sql_stmt
cursor.execute(sql_stmt, args)
return cursor
def test(self, limit = 0):
result = sql_exec("""
SELECT
*
FROM
table
""" + ("LIMIT %s" if limit else ""), (limit,))
while True:
row = result.fetchone()
if not row:
break
print row
result.close()
Comment puis-je écrire bien test() de sorte qu'il fonctionne avec ou sans « limite » sans avoir à écrire deux requêtes?
Merci S. Lott, Je suis au courant du cauchemar de la sécurité (injections SQL et ce non) qui pourrait se produire si je construire mon propre SQL, mais ayant deux requêtes identiques est sans tracas d'entretien. La suggestion LIMIT est agréable. En ce qui concerne unittest, je dois mettre du temps pour apprendre à l'utiliser, semble utile. Merci, Elias –
@lallous: "avoir deux requêtes identiques est la peine de maintenance". Pas vraiment. La menace SQL Injection est un problème. Deux requêtes identiques ne valent guère la comparaison avec la responsabilité potentielle des données piratées. –