diadia

興味があることをやってみる。自分のメモを残しておきます。

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()

postgresqlpythonのデータ型の対応

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/