PythonからPostgreSQLを操作する方法まとめ
/ 2 min read
Table of Contents
はじめに
PythonからPostgreSQLを操作する方法のまとめです。
方法
'''psycopg2を使った操作'''from psycopg2 import connect
# DB接続connection = connect( user='ユーザ名', password='パスワード', host='ホスト名', port='ポート番号', database='データベース名')
# テーブル作成cursor = connection.cursor()create_teble_query = '''CREATE TABLE テーブル名( id SERIAL, # SERIALにすることで1から自動採番される created\_at DATE, body TEXT, PRIMARY KEY(id));'''cursor.execute(create_teble_query)connection.commit()
# テーブル削除with connection as conn: with conn.cursor() as cur: cur.execute('DROP TABLE テーブル名')
# データ取得with connection as conn: with conn.cursor() as curs: curs.execute('''SELECT \* FROM テーブル名 WHERE id=%s;''', (id,)) data = curs.fetchall()# 留意点# タプル内のidの後ろにカンマが付いていることに注意。1個でもカンマがないとエラーになる。
# データ更新id = '3'value1 = '10000'value2 = 'abcde'
with connection as conn: with conn.cursor() as curs: curs.execute('''UPDATE テーブル名 SET value1=%s, value2=%s WHERE id=%s;''', (value1, value2, id))
# データ削除id = '3'
with connection as conn: with conn.cursor() as curs: curs.execute('''DELETE FROM テーブル名 WHERE id=%s;''', (id,))
'''sqlalchemyを使った操作'''from sqlalchemy import create_engineimport pandas as pd
# DB接続connection_config = { 'user': 'ユーザ名', 'password': 'パスワード', 'host': 'ホスト名', 'port': 'ポート番号', 'database': 'データベース名'}engine = create_engine( # postgres://~はエラーになるので注意(特にHeroku) 'postgresql://{user}:{password}@{host}:{port}/{database}'.format( **connection_config ))
# DFをテーブルに書き出しdf = pd.read_csv('hoge.csv')df.to_sql( 'テーブル名', con=engine, if_exists='append', # 上書きの場合はreplace index=False)
# テーブルからDFを取得sql='''SELECT column1 AS 列名1, column2 AS 列名2FROM テーブル名'''
df = pd.read_sql(sql=sql, con=engine)