Форум сайта python.su
Доброго всем времени суток! Есть задача: ввести набор данных в PostgreSQL из dbf-файла. Возможные варианты решения:
1) прочитать содержимое dbf-файла, а затем - ввести в PgSQL с помощью команды “Insert into table (column1, column2, column1) values (%s, %s, %s)” % (dbfcolumn1, dbfcolumn2, dbfcolumn3) - этот вариант я знаю как сделать, но боюсь он самый медленный из всех.
2) преобразовать dbf-файл в бинарный файл, подходящий для команды copy from binary и затем втянуть его.
3) направить содержимое dbf-файла на STDOUT и прочитать его с помощью команды copy from stdin
Проблема заключается в том, что я не знаю как реализовать последние 2 варианта. Т.е. в первом варианте нужен какой-то код, который бы преобразовывал dbf-файл в бинарник для postgresql; во втором, нужен код, который будет отправлять содержимое dbf-файла на stdin для copy from. Помогите, пожалуйста, разобраться с этими вопросами.
Офлайн
Офлайн
спасибо за ссылку :))) в общем-то мне нужен был dbf2pg для винды. На третий вопрос ответа не было ;) В общем-то с проблемой разобрался - наилучшее решение для меня будет copy from csv, а уж с csv проблем не будет.
Офлайн
Снова возникла необходимость ввода и вывода данных в/из БД с помощью copy from stdin/copy to stdout. Подскажите, пожалуйста, как это можно реализовать? Хотя бы один коротенький пример даже без пояснений.
Офлайн
Dr.LivsiА pg_dump/psql чем вам не угодили?
Снова возникла необходимость ввода и вывода данных в/из БД с помощью copy from stdin/copy to stdout. Подскажите, пожалуйста, как это можно реализовать?
Офлайн
Собственно, расскажу для чего нужно.
Был компьютер А, на котором стоял postgresql-сервер и программа-клиент, написанная на python-e. Для подключения к БД используется psycopg2. Эта программа клиент передает на сервер запрос вида:
copy (select a,b,c,d,... from table1) to 'path/to/csvfile.csv'
with csv
header
delimiter as ';'
copy (select a,b,c,d,... from table1) to STDOUT
with csv
header
delimiter as ';'
Офлайн
гммм… вроде как нашел:
http://initd.org/psycopg/docs/cursor.html
если все получится - попозже выложу решение собственной задачи
Офлайн
собственно, вот оно:
sql='''copy (select a,b,c,d,... from table1) to STDOUT
with csv
header
delimiter as ';'
'''
a=open('path/to/csvfile.csv')
cursor.copy_expert(sql, a)
a.close()
Офлайн