Thread: how to pass in bind variables with cursor.copy_expert?

how to pass in bind variables with cursor.copy_expert?

From
"W. Matthew Wilson"
Date:
I need to extract some rows from a table as a CSV file, based on a
query sort of like:

    copy (
        select *
        from blah
        where x = %(x)s
    )

but I don't see how to pass in a dictionary with values for the query!

Is this not allowed?

What am I missing?

Thanks in advance.

Matt

--
W. Matthew Wilson
matt@tplus1.com
http://tplus1.com


Re: how to pass in bind variables with cursor.copy_expert?

From
Federico Di Gregorio
Date:
On 21/02/2014 17:27, W. Matthew Wilson wrote:
> I need to extract some rows from a table as a CSV file, based on a
> query sort of like:
>
>     copy (
>         select *
>         from blah
>         where x = %(x)s
>     )
>
> but I don't see how to pass in a dictionary with values for the query!

You can use cursor.mogrify() to build the query and then pass it to
cursor.copy_export(). See the documentation for the details.

federico

--
Federico Di Gregorio                         federico.digregorio@dndg.it
Di Nunzio & Di Gregorio srl                               http://dndg.it
 Everything will be OK at the end. If it's not OK, it's not the end.
                                                              -- Unknown


Re: how to pass in bind variables with cursor.copy_expert?

From
Adrian Klaver
Date:
On 02/21/2014 08:47 AM, Federico Di Gregorio wrote:
> On 21/02/2014 17:27, W. Matthew Wilson wrote:
>> I need to extract some rows from a table as a CSV file, based on a
>> query sort of like:
>>
>>      copy (
>>          select *
>>          from blah
>>          where x = %(x)s
>>      )
>>
>> but I don't see how to pass in a dictionary with values for the query!

Would something like this work, or am I missing something?:

sql = """COPY (SELECT * FROM cell_per WHERE cell_per = %(cp)s) TO
'/home/postgres/cp.csv'"""

cur.execute(sql,{"cp": 18})

>
> You can use cursor.mogrify() to build the query and then pass it to
> cursor.copy_export(). See the documentation for the details.
>
> federico
>



Re: how to pass in bind variables with cursor.copy_expert?

From
Adrian Klaver
Date:
On 02/21/2014 08:27 AM, W. Matthew Wilson wrote:
> I need to extract some rows from a table as a CSV file, based on a
> query sort of like:
>
>      copy (
>          select *
>          from blah
>          where x = %(x)s
>      )
>
> but I don't see how to pass in a dictionary with values for the query!
>
> Is this not allowed?
>
> What am I missing?

Now I see what I was missing. I did not read the subject fully and see
you wanted to use copy_expert. In that situation, I do as Federico
suggested and build the full query first then pass it to copy_expert.

>
> Thanks in advance.
>
> Matt
>