psycopg2についてメモ
分からないことは、pysopg2とpsycopg2-binaryの違い。これはどうやって使い分けるのか。コンパイラや外部のライブラリ等を必要としないのがバイナリの方らしい。
そういう使い分け。
You can also obtain a stand-alone package, not requiring a compiler or external libraries, by installing the psycopg2-binary package from PyPI:
https://pypi.org/project/psycopg2/
コードを走らせる際に必要なライブラリがあるらしい。それがlibpqなるもののようだ。これをbinaryバージョンは別に準備しなくても実行できるってことのようだ。
psycopg2ドキュメントから得たい情報
http://initd.org/psycopg/docs/
自分が知る必要がある情報
一通りの流れのコマンド
csv読み込んでアップデートする方法
csv読み込んでインサートする方法
sqlite3,postresqlのsql文とどう違っているのか
一通りの流れのコマンド
http://initd.org/psycopg/docs/usage.html#basic-module-usage
>>> import psycopg2 # Connect to an existing database >>> conn = psycopg2.connect("dbname=test user=postgres") # Open a cursor to perform database operations >>> cur = conn.cursor() # Execute a command: this creates a new table >>> cur.execute("CREATE TABLE test (id serial PRIMARY KEY, num integer, data varchar);") # Pass data to fill a query placeholders and let Psycopg perform # the correct conversion (no more SQL injections!) >>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", ... (100, "abc'def")) # Query the database and obtain data as Python objects >>> cur.execute("SELECT * FROM test;") >>> cur.fetchone() (1, 100, "abc'def") # Make the changes to the database persistent >>> conn.commit() # Close communication with the database >>> cur.close() >>> conn.close()
postgresqlとpythonのデータ型の対応
http://initd.org/psycopg/docs/usage.html#adaptation-of-python-values-to-sql-types
postgresqlに接続する
ドキュメントではconn = psycopg2.connect("dbname=test user=postgres")と書いてあるけど、パスワードを渡す場合は引数にパスワードを使えばよい。
http://initd.org/psycopg/docs/module.html
また別の方法として、
DATABASE_URL = postgresql://{username}:{password}@{hostname}:{port}/{database}
これを使う方法もある。
conn = psycopg2.connect(DATABASE_URL)
補足:hostnameはlocalhostとすればローカルのpostgresqlにつなげる。
データベースにデータをインサートする
sqlite3の使い方とほぼ同じ。curオブジェクトをつくり、execute()メソッドを実行する。両者の違いは?を使うか%sを使うかだけだ。
#参考:pythonのsqlite3の使い方 import sqlite3 conn = sqlite3.connect("mydb.sqlite3") cur = conn.cursor() INSERT_SQL = """INSERT INTO test_teable (c1, c2, c3) VALUES (?,?,?)""" t = ("テスト", "インサート文", "やり方",) cur.execute(INSERT_SQL, t) conn.commit()
#参考:pythonのpsycopg2の使い方 import psycopg2 conn = psycopg2.connect(DATABASE_URL) cur = conn.cursor() INSERT_SQL = """INSERT INTO test_teable (c1, c2, c3) VALUES (%s,%s,%s)""" t = ("テスト", "インサート文", "やり方",) cur.execute(INSERT_SQL, t) conn.commit()
参考:
https://www.lewuathe.com/python/postgresql/remind-for-insert-into-with-psycopg2.html
https://algorithm.joho.info/programming/python/sqlite3-insert-into/