SQLite DB制御コマンド
SQLiteの制約
- Left outer joinだけをサポート。Right outer join、Full outer joinをサポートしない。
- UNIONはサポート
データベース作成/接続
$ sqlite3 db.sqlite
sqlite >
- コマンド:sqlite3 データベース名
- 指定した名前のデータベースが無ければ作成、有れば接続
データベース切断
sqlite> .quit or .exit
テーブルを作成
sqlite> create table users(id integer, name text, password text, email text);
sqlite>
- CREATE TABLE テーブル名(カラム名1 データ型, カラム名2 データ型, …)
- CREATE TABLE IF NOT EXISTS テーブル名(カラム名1 データ型, カラム名2 データ型, …)
※ IF NOT EXISTS は上書き防止のため。なくてもOK
データ型
データ型 | 内容 |
---|---|
NULL | NULL値 |
INTERGER | 整数 |
REAL | 浮動小数点数 |
TEXT | テキスト |
BLOB (Binary Large Object) | オブジェクトデータ |
- 静的型つけだけでなく、クォーテーション(‘)があればTEXT、少数点も指数もなければINTEGER、小数点があればREALといったように動的な型付けに対応している。
テーブル名の変更
sqlite> ALTER TABLE users RENAMES TO users2;
sqlite>
テーブルへのカラム追加
sqlite> ALTER TABLE users ADD COLUMN mobile;
sqlite>
他のRDBMSのようにカラム名変更やカラムの削除などが出来ない
テーブルの一覧
sqlite> .tables
users
sqlite>
テーブルの削除
sqlite> DROP TABLE staff;
sqlite>
CSVファイルのデータをテーブルにインポート
sqlite> .mode csv
sqlite> .import ./csv_data.scv staff;
- .mode csv でCSVモードに変更してから実行
- CSVファイル(csv_data.csv)をテーブル(staff)としてインポート
- 新規作成もテーブルへのCSVデータの追加もコマンドは同じ
- 追加の際はheader (id, name, email etc.) がないCSVを用意
CSVファイルにエクスポート
import csv
import sqlite3
dbpath = 'users.sqlite'
conn = sqlite3.connect(dbpath)
cursor = conn.cursor()
sql = ''' SELECT * FROM users '''
cursor.execute(sql)
data = cursor.fetchall()
# csvファイルを開きdataをcsvに書き込み
with open('output.csv', 'w') as f:
writer = csv.writer(f)
writer.writerow(['id', 'name', 'password', 'email'])
writer.writerows(data)
cursor.close()
conn.close()
SQL文
テーブル内のデータ確認
sqlite> select * from users;
0|sqladmin|sqladmin|admin@your-domain.org
sqlite>
データの挿入
sqlite> insert into users (id, name, password, email) values (0, 'name', 'password', 'name@your-domain.org');
- コマンド:INSERT INTO テーブル名 (カラム1, カラム2, カラム3, ..) VALUES (値1, 値2, 値3, …)
データの更新
sqlite> update users set password='update-pass' where id=0;
- コマンド:UPDATE テーブル名 set カラム1 =値1, カラム2=値2, カラム3=値3 where id=0
データの削除
sqlite> delete from users;