Does numeric paramstyle intend to support statements where the numbers are not 
numerically ordered within the statement?   For example:

select count(*) from my_table where a=:3 and b=:4 and c=:1 and d=:5 and e=:2


if so, what is the expected form of the positional tuple?    Consider this data:

insert into my_table(a, b, c, d, e) values ('a', 'b', 'c', 'd', 'e')

to match this row, if we assume the positional tuple's contents should 
correspond to the numbers in the statement assuming 1-based ordering, we would 
expect this statement to match the row:

cursor.execute(
    """select count(*) from my_table where a=:3 and b=:4 and c=:1 and d=:5 and 
e=:2""",
    ("c", "e", "a", "b", "d")
)

OTOH, if we did not expect the numbers to be significant, and they are 
basically more interesting looking question marks where we dont care about the 
number, we'd expect this to match:

cursor.execute(
    """select count(*) from my_table where a=:3 and b=:4 and c=:1 and d=:5 and 
e=:2""",
    ("a", "b", "c", "d", "e"),
)

Apparently Python sqlite3 module, which has been in production for decades at 
this point in billions of computers, seems to honor the second form, and an 
issue search has not shown anyone ever noticing.  I've raised an issue at 
https://github.com/python/cpython/issues/99953 

It would appear this might speak to the relative un-popularity of "numeric" 
paramstyle, though that doesn't change my own process here, which is to try to 
support it.




_______________________________________________
DB-SIG maillist  -  [email protected]
https://mail.python.org/mailman/listinfo/db-sig

Reply via email to