2018-01-23

Python sqlite3を触ってみる

Pythonでローカルで動かすちょっとしたアプリケーションなら、sqlite3がよさそうなので、基本的な触り方をメモしておく。


sqlite3とは?

  • サーバとしてではなくアプリケーションに組み込んで利用される軽量のデータベースである。
  • Android端末のDBも実はsqlite3
  • sqlite3を使うメリット
    • dbのセットアップが簡単:普通ならdbのインストール等、環境構築にものすごく時間を使うが、sqlite3だと、ファイルにデータを保存する。
    • 容量も十分:数TBは保存できるようになっていて大容量
    • そのため、ほかの人が利用する場合でも、ファイルをコピーするだけで利用できる
  • sqlite3を使うデメリット
    • 同時に書き込みができない:、本番環境では不向き:複数のユーザーに同時に書き込み権限を与えることができないので、本番環境の利用は難しい。
    • セキュリティが弱い:ファイルでデータが保存されているので、漏れたときにいちころでファイルを開けられてしまう
  • sqlite3のつかいみち 
    • ローカルで動くようなアプリにはちょうどよいと思われる
    • 逆に共同で使うようなアプリだと、セキュリティ的にも不向きかも。









実際のコード


  • DBはあらかじめ、database.dbというファイルを作成してある
  • やっていることは
    • テーブルの作成
    • 行の追加
    • 行の取得
    • 取得した行をfor文で一つ一つ取り出す
  • PythonでSQLなどの、ダブルクオートとシングルクオート使いまくるやつは、トリプルクオートで書くとよいみたい



execute.py


import sqlite3
conn = sqlite3.connect("database.db") #データベースに接続
c = conn.cursor()

# データベースの作成
create_db_sql = """CREATE TABLE IF NOT EXISTS client(name string, client_id string, client_secret string, redirect_uri string)"""
c.execute(create_db_sql)

# 行の追加
insert_db_sql = """INSERT INTO client VALUES ("hoge", "fuga", "piyo", "hoke"); """
c.execute(insert_db_sql)

# clientテーブルからすべての値を取得
select_all_sql = """"SELECT * FROM client"""
rows = c.execute(select_all_sql) # 取得した値が、tupple形式で取得される

# 行を一つずつ取り出して、出力する
for row in rows:
  print(row)

"""
> 
('hoge', 'fuga', 'piyo', 'hoke')
('hoge', 'fuga', 'piyo', 'hoke')
"""

# DBに変更を与える場合(INSERT, DELETE, CRATE TABLE, DROP TABLE)、commitしないと反映されない

c.commit()


  • DBから取得した値は、PythonのTuple(タプル)形式でデータが取得される
    • ('hoge', 'fuga', 'piyo', 'hoke')みたいな
  • 複数取得した場合は、Tuple形式のリストで取得できる



これからいろいろ修正加えます。

注目の投稿

 PythonのTweepyを利用して、Twitter APIを利用している。 その中で、ハマったポイントをメモしておく。 まず、Searchに関して。 Twitter検索は、クライアントアプリ側では、全期間の検索が可能になっている。 一方で、APIを利用する際は、過去1週間しか...