sqlite3, qmarks, and NULL values
John Machin
sjmachin at lexicon.net
Tue May 19 21:37:27 EDT 2009
On May 20, 10:54 am, MRAB <goo... at mrabarnett.plus.com> wrote:
> Mitchell L Model wrote:
> > Suppose I have a simple query in sqlite3 in a function:
>
> > def lookupxy(x, y):
> > conn.execute("SELECT * FROM table WHERE COL1 = ? AND COL2 = ?",
> > (x, y))
>
> > However, COL2 might be NULL. I can't figure out a value for y that would retrieve rows for which COL2 is NULL. It seems to me that I have to perform an awkward test to determine whether to execute a query with one question mark or two.
>
> [snip]
> Have you tried None, ie lookupxy(x, None)?
Have *you* tried that? Here's another armchair philosopher's take on
the expected outcome:
EITHER:
the wrapper blindly causes this to appear like "... COL2 = NULL",
which won't/shouldn't work. "expression = NULL" is neither true nor
false, it's unknown. The WHERE clause will/should return no rows at
all.
Example of unknowableness of nullity using relops:
sqlite> select case when 1 = null then 'A' else 'B' end;
B
sqlite> select case when 1 <> null then 'A' else 'B' end;
B
Note that "1 = null" is not true AND "1 <> null" is not true either.
OR:
The wrapper cunningly but unadvertisedly is causing that to appear
like "... COL2 IS NULL"
Cheers,
John
More information about the Python-list
mailing list