🍛

【PostgreSQL】PythonでDBにデータをINSERTする

2023/04/12に公開

はじめに

VScode上でPythonを書きPostgreSQLを操作するまでを、備忘録として残しておきます。

目次

1.psycopg2,PostgreSQLのインストール

2.DB,テーブルの作成

3.レコードを挿入する(INSERT)

1.psycopg2,PostgreSQLのインストール

PostgreSQL(ポストグレスキューエル、略称: Postgres)は、オープンソースのRDBMSです。PostgreSQLへは、Pythonからもアクセスでき、Pythonではpsycopg2というパッケージを利用し、PostgreSQLへ接続します。

psycopg2のインストール

pip install psycopg2

インストールに失敗する場合

以下のバイナリを利用する方法を試してください。
(*バイナリとは、0と1の二進数で表現される形式で処理速度が速い)

pip install psycopg2-binary

PostgreSQLのインストール(Windows)

PostgreSQLの公式サイト(https://www.postgresql.org/)からダウンロードしてください。

これで準備は完了です。

2.DB,テーブルの作成

PostgreSQLサーバへの接続

SQL Shell (psql) を起動して、PostgreSQLサーバに接続します。
SQL Shell (psql) の起動は、ターミナルに以下を打ち込んでください。

sudo -u postgres psql

これでPostgreSQLサーバに接続できています。

パスを通している場合、コマンドプロンプトを開きPostgreSQLに接続します。
コマンドプロンプトで接続するには以下のように入力します。

C:\>psql -h localhost -p 5432 -U postgres

または

C:\>psql -U postgres

「ユーザ postgres のパスワード: 」と表示されるので、インストール時に設定したパスワードを入力します。
これでPostgreSQLサーバに接続できています。

DBの作成

DBを作成します。
psql上で、create database データベース名; と入力すると、CREATE DATABASEと表示されます。

postgres=# create database testdb;
CREATE DATABASE

\l と入力するとデータベース一覧を表示できるので、testdbが作成されていることを確認できます。)
(psqlでは末尾に;(セミコロン)をつけることで、処理を実行してくれます。)

テーブルの作成

次に、先程作成したdbにテーブルを作成します。
先程のtestdbに接続するため、\c testdb; と入力します。

postgres=# ¥c testdb
You are now connected to database "testdb" as user "postgres".

以下のクエリを入力して、testdbにtestテーブルを作成します。

CREATE TABLE test (
id SERIAL,
email varchar(50) NOT NULL,
password varchar(50) NOT NULL,
PRIMARY KEY (id)
) ;

CREATE TABLE とメッセージが表示されれば正常にテーブルが作成されています。
\dtで作成したテーブル一覧を表示することが出来ます。

3.レコードを挿入する(INSERT)

1レコード挿入

Pythonファイルを作成します。
ここにレコードを挿入するコードを書きます。

import psycopg2
 
# データベースに接続
connection = psycopg2.connect(host='localhost',
                              user='postgres',
                              password='PostgreSQLのパスワード',
                              database='testdb')
 
with connection:
    with connection.cursor() as cursor:
        # レコードを挿入
        sql = "INSERT INTO testdb (email, password) VALUES (%s, %s)"
        cursor.execute(sql, ('testdb@python.mail', 'password'))
 
    # コミットしてトランザクション実行
    connection.commit()

結果の確認は、PostgreSQLでselectクエリを実行します。

testdb=# select * from test;
 id |        email         |  password
----+----------------------+-------------
 1  | testdb@python.mail   | password

レコードが挿入されていることが確認できました。

csvファイルからレコード挿入

次にcsvファイルから一括でレコードを挿入する方法を記述します。

import psycopg2
import csv

# データベースに接続
    connection = psycopg2.connect(host='localhost',
                              user='postgres',
                              password='PostgreSQLのパスワード',
                              database='testdb')
			      
    # CSVファイルからデータを読み取り、データベースに挿入する
    with connection:
        with connection.cursor() as cursor:
    with open('読み込みたいcsvファイルのパス', 'r', encoding='utf-8') as file:
        reader = csv.DictReader(file, fieldnames=['email', 'password'])
        with connection.cursor() as cursor:
            for row in reader:
                email = row['email']
                password = row['password']
                cursor.execute("INSERT INTO ipmatching_test (email, password) VALUES                               (%s, %s, %s, %s)", (email, password))
        connection.commit()

    # 接続を閉じる
    connection.close()

読み込みたいcsvファイルのパスを変更し、カラム名も適宜変更してください。

以上で、「PythonでDBにデータをINSERTする」は完了です。

Discussion