個人的な備忘録も兼ねて。
基本的な操作に関しては公式ドキュメントの上側に書いてあるものがとてもわかりやすいのでそちらも参照すると良い
この文章の中ではPythonとSQL文がごっちゃになっているので、Pythonには左上にpythonと書いてあります。
pythonから扱うには基本的には
import sqlite3
conn = sqlite3.connect('example.sqlite3')
c = conn.cursor()
c.execute('create table persons(id integer, name text, birthday)')
という感じでオブジェクトを作って、
c.execute()
のカッコ内にSQL文を突っ込めば動きそう。
閉じ方は
conn.commit()
conn.close()
で閉じる。
このconn.commit()
をしないとsqlite3でデータベースに加えた変更が保存されないので注意。
#SQL文
テーブルを新しく作成する。
create table persons(id integer, name text, birthday)
カッコの中身は(カラム名 カラム型)の組み合わせを並べていて、カラム型に使えるものとしては
カラム型の名前 | データ型 |
---|---|
text | str |
integer | int |
real | float |
numeric | binary |
none | none |
がある。カラム型は指定しなくても特には問題ない(noneが初期値として入っている)
型を指定してあったところでなんでも入るけど、その型に変換できるようであれば勝手に変換してくれるらしいので基本的には指定しておいた方が便利かも?
ここにわかりやすく書いてあるのでわからなくなったら参照
(SQLにて使えるデータ型についても記述があります。)
カラムを追加する
alter table persons add column blood_type text
personsのところにテーブル名、blood_type textのところにカラム名とカラム型を入れればよい。
カラム名を列挙する
for desc in c.description:
print(desc[0])
#id
#name
#birthday
#blood_type
データを追加する
一つ追加するとき
insert into persons values (1, '太郎', '1996-01-04','B')
複数追加するとき
persons_data = [(2,'二郎','1997-01-04','A'),
(3,'三郎','1998-01-04',None)]
c.executemany("insert into persons values (?,?,?,?)", persons_data)
となる。
中身を見るとき
やり方は公式によれば3つほどあるけど、どれも同じらしいので2つ書いておく。
- fetchall()を使うやり方
c.execute('select * from persons')
data = c.fetchall()
print(data)
#[(1, '太郎', '1996-01-04','B'),(2,'二郎','1997-01-04','A'),(3,'三郎','1998-01-04',None)]
- イテレータとして扱う方法
for row in c.execute('select * from persons'):
print(row)
#(1, '太郎', '1996-01-04','B')
#(2,'二郎','1997-01-04','A')
#(3,'三郎','1998-01-04',None)
select文の使い方として、
select * from persons order by name
などとするとそのカラムにおいて昇順で出てくる。
select * from persons where blood_type='B'
とすると太郎のデータだけ取り出すことができる。