【Python】sqlite3をコード例豊富に解説! (コピペ可)

sqlite3とは

sqlite3はpythonにあらかじめ組み込まれているデータベース。コード例とともに見てみましょう。

sqlite3の基本

import sqlite3

conn = sqlite3.connect('customer.db') dbがすでにあれば読み込む,なければdbを作成して読み込む
c = conn.cursor() 操作のためにカーソルをつくる

"""CRUD操作"""

conn.commit()
conn.close()

CRUD操作

基本操作のCreateReadUpdateDeleteを見てみましょう。ポイントは、c.excecuteの中にSQL文を書くことです。SQL文は”で囲うこと。長くなるSQL文はdocstring “”” “”” で囲むことです。

Create

テーブルを作ってみましょう。customersという名前のテーブルを作り、カラムを追加します。(注意するのは、最後のemail text のところでカンマをつけない)

import sqlite3

conn = sqlite3.connect('customer.db')
c = conn.cursor()

c.execute("""CREATE TABLE customers (
    first_name text,
    last_name text,
    email text
    )""")

conn.commit()
conn.close()

最後にdbの変更を確定するのに、commitします。データベースとの接続を解除するためにcloseします。

カラムの型には以下のようなものがあります。(小文字も可能) NULL 存在するかどうか, INTERGER 整数, REAL 実数, TEXT テキスト, BLOB そのままの状態 画像とか音楽

次に、顧客データを挿入してみましょう。

import sqlite3

conn = sqlite3.connect('customer.db')
c = conn.cursor()

c.execute("INSERT INTO customers VALUES ('John', 'Elder's, 'john@codemy.com')")
c.execute("INSERT INTO customers VALUES ('Mary', 'Brown', 'mary@codemy.com')")

print("command executed successfully")
conn.commit()
conn.close()

これで、JohnとMaryのデータがテーブルに挿入されました。

複数データを一度に挿入してみましょう。一人の顧客データはタプルにして、全てリストにします。executemanyで挿入します。

import sqlite3

conn = sqlite3.connect('customer.db')
c = conn.cursor()

many_customers = [
				('Wes', 'Brown', 'wes@brown.com'),
                ('Steph', 'Kuewa', 'steph@kuewa.com'),
                ('Dan', 'Pas', 'dan@pas.com'),
				]
c.executemany("INSERT INTO customers VALUES (?,?,?)", many_customers)

print("command executed successfully")
conn.commit()
conn.close()

Read

次はデータを読み込んでみましょう。SELECT分で検索して、呼び出します。そしてc.fetchall()でオブジェクトを取り出します。

import sqlite3

conn = sqlite3.connect('customer.db')
c = conn.cursor()

c.execute("SELECT * FROM customers")
c.execute("SELECT * FROM customers WHERE last_name = 'Elder'")
c.execute("SELECT * FROM customers WHERE last_name LIKE 'Br%'")
c.execute("SELECT * FROM customers WHERE email LIKE '%codemy.com'")

c.execute("SELECT rowid, * FROM customers ORDER BY rowid DESC")
c.execute("SELECT rowid, * FROM customers ORDER BY last_name")
c.execute("SELECT rowid, * FROM customers WHERE last_name LIKE 'Br%' OR rowid = 1")
c.execute("SELECT rowid, * FROM customers ORDER BY rowid DESC LIMIT 3")

c.fetchone() 一行だけ取り出す
c.fetchmany(3) 3 行取り出す
c.fetchall() 全てをリスト型で取得

items = c.fetchall()
for item in items:
    print(item)

conn.commit()
conn.close()

Upload

import sqlite3

conn = sqlite3.connect('customer.db')
c = conn.cursor()

c.execute("""UPDATE customers SET first_name = 'John'
            WHERE rowid = 1
    """)

conn.commit()
conn.close()

Delete

import sqlite3

conn = sqlite3.connect('customer.db')
c = conn.cursor()

c.execute("""DELETE from customers WHERE rowid = 4""")

conn.commit()
conn.close()