メモ:PythonでDBを使用する①


◯私の現在の状態
Python3系が使えるようになった(環境の話)
SQLがだいたいわかる,勉強した。
エディタはAtomを使用している。
DBを使用したWebアプリを何か作りたい。
弊社の蔵書管理がアナログなのでここをなんとかするものを作ってみよう。

買った本👇(´・ω・`)

Pythonデータベースプログラミング入門

Pythonデータベースプログラミング入門

1〜5章はSQLの解説がメインっぽい。
SQLはわかるけど,Pythonがわからない人間にとって必要だった知識を抜粋する。


PythonにはSQLiteというDBMSが標準で組み込まれている
SQLiteはデータベースサーバとしてのプロセスは不要で,アプリから直接データベースを扱うことができる。

SQLiteを使えるようにする。(Pythonの一次プロンプトに対して入力する)

import sqlite3

データベースに接続するには

conn = sqlite3.connect("Customer.db",isolation_level=None)

sqlite3.connectの最初の引数(ここではCostomer.db)が存在している場合は,そのDBへ接続。存在しなかった場合は新たに作成する。
2つめの引数(isolation_level=None)は変更をデータベースに自動的に反映させる,という設定を入れている。
変更をデータベースに自動反映させない場合は2つめの引数を省略する。

赤丸はカレントディレクトリに作成されたCustomer.db
右下はターミナルの画面。

f:id:ci_melon:20190420001952p:plain
db1


データベースに対してSQLを実行するには,適当な変数にSQL文を格納してから実行するか,そのまま実行するかのどちらかっぽい。

conn.execute("INSERT INTO Member VALUES('1001','Alice',12,'Alice@ppp.ja')")
sql="INSERT INTO Member VALUES('1001','Alice',12,'Alice@ppp.ja')"
conn.execute(sql)

どっちも同じ結果になる。要は「conn.execute(ここにSQL文)」で実行できるようだ。


SQL文の実行の仕方がわかったのでとりあえずテーブルを作成する。

#SQLiteのモジュールをインポートする
import sqlite3

#Customer.dbに接続
conn=sqlite3.connect("Customer.db",isolation_level=None)

#テーブルを作成
#table_name:Member
#column:id name age address
sql=""""
CREATE TABLE Member(
    id VARCHAR(4),
    name VARCHAR(20),
    age integer(2),
    address VARCHAR(128)
);
"""
#変数sqlに格納したINSERT文を実行する
conn.execute(sql)

で,わけがわからないのだが「カーソル」という概念がある。

f:id:ci_melon:20190420003929p:plain
db2
こんな感じでCursor object at XXXXXXXみたいなやつ。
これはconn.execute()が実行された結果で,カーソルというオブジェクトが指している位置を表している,と書いているが意味がわからねえ。
気にしなくていいとあるからとりあえず気にしないことにするが,テーブルの中身を確認するときにこの概念を使うぞ。

その前にさっき作ったテーブルに適当にレコードをインサートしてくる。
どうでもいいけど,ここで使うSQL文はお尻にセミコロンをつけないので気持ちが悪い。
(OracleDBBronzeの勉強をしてる人の感想。)

適当に入れてみたデータを確認する

f:id:ci_melon:20190420004945p:plain
db3
意味がよくわかんねーんだが,カーソルというオブジェクトの値を一旦変数cに入れて,SELECT文を実行すると,今度はcの中にSELECT文の中身が格納される,
そのあとFor文とPrint文で目に見えるようにした,という感じなんだろうか。

疲れたからデータベースを閉じたいとき

conn.close()

また接続したい時は上の手順で接続すれば(import sqlite3から始めれば)また途中からいじり始めることができる。(勝手にコミットされているので)