Lie Hetland book: Beginning Python..
Steve Holden
steve at holdenweb.com
Wed Nov 9 12:57:46 EST 2005
Gerhard Häring wrote:
> Vittorio wrote:
>
>>[...]
>>Nonetheless, I was unable to find any documentation about such a
>>different behaviour between Pysqlite and Pysqlite2; from my beginner
>>point of view the Pysqlite (Magnus' version) paramstyle looks a better
>>and more pythonic choice and I don't grasp the Pysqlite2 developers'
>>intentions deviating from that way.
>
>
> The reason why pysqlite 0.x/1.x used paramstyle "pyformat", based on
> Python string substitution for SQL parameters is that at the time
> pysqlite was started, SQLite 2.x did not have any support for parameter
> binding. So we had to "fake" it in Python, just like the MySQL interface
> does (for the same reasons).
>
> Later SQLite 2.x versions and of course SQLite 3.x supported real bound
> parameters and pysqlite2 was developed from scratch to benefit from
> them. SQLite 3.x supports both qmark and named paramstyles, so you can
> use question marks *or* named parameters:
>
> >>> from pysqlite2 import dbapi2 as sqlite
> >>> con = sqlite.connect(":memory:")
> >>> cur = con.cursor()
> >>> cur.execute("select 2*?", (14,))
> >>> cur.fetchone()
> (28,)
> >>>
> >>> cur.execute("select 2 * :x", {"x": 14})
> >>> cur.fetchone()
> (28,)
> >>>
> >>> x = 14
> >>> cur.execute("select 2 * :x", locals())
> >>> cur.fetchone()
> (28,)
> >>>
>
> I've also once written a wrapper using pysqlite 2.x's hooks that allows
[...]
>
>>I would be very grateful if someone would cast a light over
>>Pysqlite/Pysqlite2 discrepancies.
>
>
> I think about the only place I wrote a bit about the differences was in
> the pysqlite 2.0 final announcement:
>
> http://lists.initd.org/pipermail/pysqlite/2005-May/000043.html
>
Unfortunately this appears to mean that pysqlite2 isn't fully DB
API-conformant.
>>> import pysqlite2
>>> pysqlite2.paramstyle
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: 'module' object has no attribute 'paramstyle'
>>>
Of course, given the module's flexibility it's difficult to know what
you *would* put in paramstyle. I take it mixing different paramstyles in
the same query will fail?
regards
Steve
--
Steve Holden +44 150 684 7255 +1 800 494 3119
Holden Web LLC www.holdenweb.com
PyCon TX 2006 www.python.org/pycon/
More information about the Python-list
mailing list