On 10/28/2015 08:25 AM, Dan Sawyer wrote:
> Yes. That is what is producing the errors. The pertinent lines are:
>
> conn = psycopg2.connect(conn_string)
> cursoro = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
> ... processing python code
> ... creates test.txt
> ... closes test.txt
> f = open("/tmp/test.txt","r")
> copy_string = 'copy temp_tbl from '/tmp/test.txt' csv delimiter
> '|';'
> cursoro.copy_expert(copy_string, file)
>
> Is a cursor the wrong way to reference copy_expert ?
No, but this:
'copy temp_tbl from '/tmp/test.txt'
needs to be:
'copy temp_tbl from FROM STDIN'
See:
http://initd.org/psycopg/docs/cursor.html#cursor.copy_expert
>
> On 10/28/2015 08:06 AM, Shulgin, Oleksandr wrote:
>> On Wed, Oct 28, 2015 at 4:04 PM, Dan Sawyer <dansawyer@earthlink.net
>> <mailto:dansawyer@earthlink.net>> wrote:
>>
>> The file open command is:
>>
>> f = open("/tmp/test.txt","r")
>>
>> Is this correct? Is the read method syntax correct
>>
>>
>> Well, it looks correct. Do you get any errors with that?
>>
>> On 10/28/2015 07:42 AM, Shulgin, Oleksandr wrote:
>>> On Wed, Oct 28, 2015 at 3:35 PM, Adrian Klaver
>>> <adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>> wrote:
>>>
>>>
>>> The cheat is to read the on disk file and write it into an in
>>> memory file and then use that with STDIN. Something like:
>>>
>>> sql_copy = "COPY " + self.pg_tbl_name
>>> sql_copy += " FROM STDIN WITH CSV DELIMITER '\t'"
>>> cur_copy.copy_expert(sql_copy, mem_file)
>>>
>>>
>>> And you don't actually need a "memory file", any object
>>> implementing "read" method, such as a normal fie object should
>>> just work:
>>>
>>> file=open('1.txt', 'r')
>>> cur_copy.copy_expert(sql_copy, file)
>>>
>>> --
>>> Alex
>>
>>
>
--
Adrian Klaver
adrian.klaver@aklaver.com