3

DB サーバー (PostgreSQL 9.3) に接続するためにPython 2.7とを使用しています。( Product Class ) のオブジェクトのリストには、挿入したい項目が含まれています。psycopg2

products_list = []
products_list.append(product1)
products_list.append(product2)

copy_fromそして、この製品リストを製品テーブルに挿入するために使用したいと思います。いくつかのチュートリアルを試してみましたが、値に一重引用符、改行、タブ、および二重引用符が含まれているため、製品リストを CSV 形式に変換する際に問題が発生しました。例 (製品説明):

<div class="product_desc">
    Details :
    Product's Name : name
</div>

単一引用符の前に単一引用符を追加することにより、エスケープによって HTML コードが破損しました。そのため、保存方法を使用してリストを CSV に変換し、コピーする必要がありますか? または、CSV形式に変換せずにリストを挿入する他の方法を使用しますか??

4

1 に答える 1

1

私はそれを理解しました。まず、オブジェクトをcsv行に変換する関数を作成しました

import csv

@staticmethod
def adding_product_to_csv(item, out):
writer = csv.writer(out, quoting=csv.QUOTE_MINIMAL,quotechar='"',delimiter=',',lineterminator="\r\n")
writer.writerow([item.name,item.description])

次に、私のコードでPython IO、データを保存するために使用して csv ファイルを作成COPYし、以前の関数を使用して csv ファイルにすべてのオブジェクトを保存しました。

file_name = "/tmp/file.csv"
myfile = open(file_name, 'a')
for item in object_items:
    adding_product_to_csv(item, myfile)

これでファイルを作成し、次のCSVファイルを使用してコピーする準備が整いましcopy_frompsycopg2:

# For some reason it needs to be closed before copying it to the table
csv_file.close()
cursor.copy_expert("COPY products(name, description) from stdin with delimiter as ',' csv QUOTE '\"' ESCAPE '\"' NULL 'null' ",open(file_name))
conn.commit()
# Clearing the file
open(file_name, 'w').close()

そして、それは今働いています。

于 2015-06-17T12:56:55.027 に答える