Victor Subervi wrote:
Hi;
The following code works fine. I would like you to suggest something more
simple and elegant:

      sql = 'select p.ID from %sPackages p join %sCategoriesPackages c where
c.CategoryID=%s;' % (store, store, categoryID)
      cursor.execute(sql)
      tmp = [itm[0] for itm in cursor]
      packageIDs = []
      for t in tmp:
        if t not in packageIDs:
          packageIDs.append(t)

You mean like

  sql = "select distinct p.ID from ..." % (...)
  #             ^^^^^^^^
  cursor.execute(sql)
  package_ids = [row[0] for row in cursor.fetchall()]

It would also help if you didn't pass the categoryID as a string-formatted value, but as a proper parameter, something like

  sql = "... where c.categoryid=?" % (store, store)
  cursor.execute(sql, (category_id,))

This helps prevent SQL-injection attacks (assuming you have full control over the value of "store"...otherwise, as you've been advised, if the remote user has control over the value in "store", you're asking to be exploited). You'd have to check the place-holder character for your particular back-end:

  >>> import <your database engine> as db
  >>> print db.paramstyle

should tell you whether to use "?", "%s", or some other notation.



--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to