Version 3.6.1 on CentOS7
単純なSELECT 使用するテーブル
import psycopg2
constr = "host=localhost port=5432 dbname=dbname user=user password=password"
conn = psycopg2.connect(constr)
sql = "SELECT * FROM t_yubin_bango LIMIT 10"
cur = conn.cursor()
print(cur)
cur.execute(sql)
for row in cur:
print(row)
con.close()
<cursor object at 0x7f2756682900; closed: 0> ('0600000', 'ホッカイドウ', 'サッポロシチュウオウク', ' ', '北海道', '札幌市中央区', ' ') ('0640941', 'ホッカイドウ', 'サッポロシチュウオウク', 'アサヒガオカ', '北海道', '札幌市中央区', '旭ケ丘') ('0600041', 'ホッカイドウ', 'サッポロシチュウオウク', 'オオドオリヒガシ', '北海道', '札幌市中央区', '大通東') ('0600042', 'ホッカイドウ', 'サッポロシチュウオウク', 'オオドオリニシ(1-19チョウメ)', '北海道', '札幌市中央区', '大通西 (1~19丁目)') ('0640820', 'ホッカイドウ', 'サッポロシチュウオウク', 'オオドオリニシ(20-28チョウメ)', '北海道', '札幌市中央区', '大通西(20~28丁目)') ('0600031', 'ホッカイドウ', 'サッポロシチュウオウク', 'キタ1ジョウヒガシ', '北海道', '札幌市中央区', '北一条東') ('0600001', 'ホッカイドウ', 'サッポロシチュウオウク', 'キタ1ジョウニシ(1-19チョウメ)', '北海道', '札幌市中央区', '北一条西(1~19丁目)') ('0640821', 'ホッカイドウ', 'サッポロシチュウオウク', 'キタ1ジョウニシ(20-28チョウメ)', '北海道', '札幌市中央区', '北一 条西(20~28丁目)') ('0600032', 'ホッカイドウ', 'サッポロシチュウオウク', 'キタ2ジョウヒガシ', '北海道', '札幌市中央区', '北二条東') ('0600002', 'ホッカイドウ', 'サッポロシチュウオウク', 'キタ2ジョウニシ(1-19チョウメ)', '北海道', '札幌市中央区', '北二条西(1~19丁目)')SQLダンプ
BEGIN SELECT * FROM t_yubin_bango LIMIT 10※ BEGINが発行されている。
複数回SELECTしてみる
import psycopg2
# SELECTメソッド
def do_select(sql):
cur.execute(sql)
for row in cur:
print(row)
# main
constr = "host=localhost port=5432 dbname=dbname user=user password=password"
conn = psycopg2.connect(constr)
cur = conn.cursor()
# SELECT 1
sql = "SELECT CURRENT_TIMESTAMP"
do_select(sql)
# SELECT 2
sql = "SELECT CURRENT_TIMESTAMP"
do_select(sql)
# SELECT 3
sql = "SELECT CURRENT_TIMESTAMP"
do_select(sql)
conn.close()
(datetime.datetime(2017, 4, 29, 18, 15, 17, 478226, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=540, name=None)),) (datetime.datetime(2017, 4, 29, 18, 15, 17, 478226, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=540, name=None)),) (datetime.datetime(2017, 4, 29, 18, 15, 17, 478226, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=540, name=None)),)SQLダンプ
BEGIN SELECT CURRENT_TIMESTAMP SELECT CURRENT_TIMESTAMP SELECT CURRENT_TIMESTAMP※ 最初のSELECT実行前にBEGINが発行されている。
複数回SELECTの途中でコミットしてみる。
import psycopg2
# SELECTメソッド
def do_select(sql):
cur.execute(sql)
for row in cur:
print(row)
# main
constr = "host=localhost port=5432 dbname=dbname user=user password=password"
conn = psycopg2.connect(constr)
cur = conn.cursor()
# SELECT 1
sql = "SELECT 1"
do_select(sql)
# SELECT 2
sql = "SELECT 2"
do_select(sql)
conn.commit();
# SELECT 3
sql = "SELECT 3"
do_select(sql)
conn.rollback()
conn.close()
(1,) (2,) (3,)SQLダンプ
BEGIN SELECT 1 SELECT 2 COMMIT BEGIN SELECT 2 ROLLBACK
※ 明示的にトランザクションが開始されるので、すぐに終了しないPYTHONプログラムでは、SELECTであってもCOMMITするのが望ましい。
デフォルト値:AUTOCOMMIT=FALSE
※ デフォルトでは更新系SQLはCOMMITしなければ他のセッションに反映されない。:IDLE状態のPOSTGRESプロセスが消える→ROLLBACK