Gilles Ganault wrote:
On Mon, 2 Jun 2008 12:06:21 -0700 (PDT), Matimus <[EMAIL PROTECTED]>
wrote:
Here is a brief example. Note that this code is very insecure ....
sql = "INSERT INTO mytable (col1, col2) VALUES ('%s','%s')"%tuple(
(c, "NULL")[c == ''] for c in m.groups()
)
I don't understand this syntax :-/
(c, "NULL") is a tuple; it is being indexed by the boolean "c == ''"
Since False is 0, and True is 1, the expression picks out "NULL"
exactly when c is the zero-length string.
A more idiomatic Python way of writing this (for the very special case
of '' or 0 or 0.0, or ...) is
sql = "INSERT INTO mytable (col1, col2) VALUES ('%s','%s')" % tuple(
(c or "NULL") for c in m.groups())
You can avoid problems w/ possible 0s or 0.0s or .. by using:
(str(c) or "NULL") for c in groups())
the "or" (or a similar "and" trick) will continue to work. The
different "empty" or "nothing" values of a data type are treated as
false in part to allow such shenanigans. If used sparingly, it make
your code clearer, but over-use can make the reader scratch his head in
wonder.
--Scott David Daniels
[EMAIL PROTECTED]
--
http://mail.python.org/mailman/listinfo/python-list