ここでは、スナップインのPostgreSQLデータベースにデータのトンをアップロードする方法です



必要条件
  • Python
  • データを含むCSVファイル

  • インストール
    psycopg2 Pythonライブラリは使用します.次のコマンドを実行してパッケージをインストールします.
    $ pip install psycopg2
    

    輸入品
    テキストエディタを起動し、これらのインポートをPythonファイルに追加します.CSVファイルからデータをインポートするためにCSVパッケージを使用します.
    import psycopg2.sql as psql
    import psycopg2.extras
    import psycopg2
    import csv
    
    好奇心旺盛ならpsycopg2.sql Pythonを使用してSQLクエリを生成するSQL関連ヘルパーを含みますpsycopg2.extras このチュートリアルの最も重要な方法を含みますexecute_values() - インポートクエリを最終的に実行するために使用します.

    3 .データベース接続オブジェクトとカーソルを作成する
    これらのオブジェクトはsingletons これはデータベースへの接続を保持します.
    DB = psycopg2.connect(
        dsn=None, 
        dbname='your_database', 
        user='postgres', 
        host='localhost', 
        password='password'
    )
    db_cursor = DB.cursor
    

    4 . CSVファイルからデータを読み込みます
  • あなたのCSVファイルをあなたのPythonスクリプトと同じディレクトリに置いてください
  • CSVデータを簡単にインポートするには、次のコードを使用できます
  • with open('your_csv_file.csv') as f:
        reader = csv.reader(f, delimiter=',')
        allrows = []
    
        for line in reader:
            allrows.append({ "column1": line[0], "column2": line[1] })
    
  • line forループはCSV行のすべての値のリストです.line[0] 最初のフィールドになります.line[1] 二つ目など.
  • ごとにline/CSVの行の上にループされ、キーがフィールド/列の名前と値がどこにある辞書を作成します.値.
  • The allrows 変数は、作成されたすべての辞書(それぞれが挿入される行を表す)のリストを格納します.
  • PS :キーをデータに挿入するテーブルの列名と全く同じであることが重要です.この一貫性は、残りの手順を動作させるために必要です.あなたは確かに別の名前を使用することを選択することができますが、その後、それを動作するように以下の手順を更新する必要があります.

    再利用可能なSQLの生成
    この手順では、次の関数を使用してSQLを生成します
    def create_sql(table_name, column_names):
        query = psql.SQL("INSERT INTO {} ({}) VALUES %s").format(
            psql.Identifier(table_name),
            psql.SQL(', ').join(map(psql.Identifier, column_names))
        )
        query2 = psql.SQL("({})").format(
            psql.SQL(', ').join(map(psql.Placeholder, column_names)),
        )
    
        return query.as_string(DB), query2.as_string(DB)
    
  • ここで使用されるヘルパー関数は、動的にSQLクエリを作成します
  • 我々は本当に2クエリを実行していませんquery2 動的に生成されたSQLの一部を表しますVALUES 典型的な挿入SQLクエリで.
  • 更新するテーブルの名前、およびカラム名を指定して関数を呼び出します.
    insert_sql, template_sql = create_sql('your_table', ['column1', 'column2'])
    
    私はあなたに別の値がどのように見えるかを調べるために印刷文またはブレークポイントを加えるのを奨励します.以下は、私が印刷したことがわかりますallrows , insert_sql and template_sql ダミーデータがどのように挿入されるかを見るには


    6 .クエリの実行
    psycopg2.extras.execute_values(db_cusror, insert_sql, allrows, template_sql)
    
    変更がまだコミットされていないことに注意してください.これはエラーをテストする良いチェックポイントです(つまり、この時点までエラーが発生しない場合は、最後のステップを実行するのが良いということです).

    7 .変更をコミットする🎉
    DB.commit()
    
    おめでとう!これで、このスクリプトを使用してデータを大量にインポートすることができます🪄
    共有したい部分や考えについての質問がある場合は、以下のコメントを参照ください.