psycopg2でpostgresSQLにデータ登録
以下の書き方でデータ登録ができました。
#!/usr/bin/env python3 import psycopg2 # assuming # 1. a postgres service is already active. # 2. there's a database in postgres, named 'record', belonging to 'user'. # there's a table named 'name' in it, which has 2 types of data : # (id SMALLINT PRIMARY KEY, name VARCHAR(100) NOT NULL) def get_connection(): return psycopg2.connect( host = 'localhost', user = 'user', password = 'password', port = 5432, database = 'record' ) def main(): raw_data = ( (1, 'Maeda'), (2, 'Yamada'), (3, 'Fujiwara'), (4, 'Takeda'), (5, 'Kato') ) with get_connection() as conn: with conn.cursor() as cur: for each_data in raw_data: cur.execute('INSERT INTO \ name(id, name) VALUES (%s, %s);', [str(k) for k in each_data]) conn.commit() if __name__ == '__main__': main()
もしデータが1個の場合は以下のように記述する。
cur.execute('INSERT INTO name(id, name) VALUES (%s, %s);', ('1', 'Maeda',))
もしくは
cur.execute('INSERT INTO name(id, name) VALUES (%s, %s);', ['1', 'Maeda'])
とします。
ポイント
- VALUES に複数個のデータを渡したいときは、その数の分だけ %sをならべる。
- VALUES にデータを渡すときには文字列型にする。
- connection, cursor ともwith構文で書くとcloseは記述不要。
その他
- ユーザー名・パスワードを直書きしているのは、限られた人しか コードを読まない、という前提です。
環境
- postgres 11
- python3.7.3
- machine: RaspberryPi 3B / buster lite