On 11.12.2022 11:17, Tony Locke wrote:
Sorry I'm a bit late to all of this. Here's what pg8000 does, together with what it sends to PostgreSQL:

cursor.execute("SELECT :1, :2", (6, 0))
# Sent to server: "SELECT $1, $2"
# Result:  ['6', '0']

cursor.execute("SELECT :2, :1", (6, 0))
# Sent to server: "SELECT $2, $1"
# Result: ['0', '6']

So the driver pg8000 just replaces ':' with '$' and sends it to the server, and the server uses each numeric as an index into the parameter list, and ignores the order in which the placeholders appear in the statement.

Thanks for the added insight. The above is what we had in mind with
the numeric binding type, even though it is not explicitly spelled
out in PEP 249.

Perhaps I ought to add a footnote to the PEP to explain the mode
in more detail.

On Fri, 2 Dec 2022 at 17:57, Marc-Andre Lemburg <m...@egenix.com <mailto:m...@egenix.com>> wrote:

    On 02.12.2022 18:32, John Stevenson - BGS wrote:

    The documents officially state “named” as the paramstyle, but with
    cx_Oracle we often use the numeric style with executemany so that
    we can insert from lists of tuples.  In this context, the useful
    “feature” of the numeric paramstyle is that you don’t need to
    transform your data into a dictionary.

    
https://cx-oracle.readthedocs.io/en/latest/api_manual/module.html#cx_Oracle.paramstyle
 
<https://cx-oracle.readthedocs.io/en/latest/api_manual/module.html#cx_Oracle.paramstyle>

    I haven’t tried binding the same value multiple times or using the
    placeholders in different orders, though.

    cx_Oracle seems to use "named" style, but simply binds by position
    when passing in a tuple instead of a dictionary (or keyword args).
    At least that's what the docs suggest:

    https://cx-oracle.readthedocs.io/en/latest/user_guide/bind.html
    <https://cx-oracle.readthedocs.io/en/latest/user_guide/bind.html>

    I suppose that using "where a=:2 and b=:1" would still bind the
    first parameter value to "a" and the second to "b".

-- Marc-Andre Lemburg
    eGenix.com

    Professional Python Services directly from the Experts (#1, Dec 02 2022)
    >>> Python Projects, Coaching and Support ...    https://www.egenix.com/  
<https://www.egenix.com/>
    >>> Python Product Development ...        https://consulting.egenix.com/  
<https://consulting.egenix.com/>
    ________________________________________________________________________

    ::: We implement business ideas - efficiently in both time and costs :::
eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48
         D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
                Registered at Amtsgericht Duesseldorf: HRB 46611
                    https://www.egenix.com/company/contact/  
<https://www.egenix.com/company/contact/>
                          https://www.malemburg.com/  
<https://www.malemburg.com/>

    _______________________________________________
    DB-SIG maillist  - DB-SIG@python.org <mailto:DB-SIG@python.org>
    https://mail.python.org/mailman/listinfo/db-sig
    <https://mail.python.org/mailman/listinfo/db-sig>


_______________________________________________
DB-SIG maillist  -  DB-SIG@python.org
https://mail.python.org/mailman/listinfo/db-sig

--
Marc-Andre Lemburg
eGenix.com

Professional Python Services directly from the Experts (#1, Dec 13 2022)
>>> Python Projects, Coaching and Support ...    https://www.egenix.com/
>>> Python Product Development ...        https://consulting.egenix.com/
________________________________________________________________________

::: We implement business ideas - efficiently in both time and costs :::

   eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
    D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
           Registered at Amtsgericht Duesseldorf: HRB 46611
               https://www.egenix.com/company/contact/
                     https://www.malemburg.com/

_______________________________________________
DB-SIG maillist  -  DB-SIG@python.org
https://mail.python.org/mailman/listinfo/db-sig

Reply via email to