SQLite

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

データ型

データ型内容
NULLNULL値
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;