データベース取り扱いの前提
データ定義言語 (Data Definition Language:DDL)は自動的にCOMMITされるので、処理に加えなくていい。
- CREATE (CREATE TABLE,CREATE SEQUENCE,CREATE SYNONYM)
- ALTER (ALTER TABLE,ALTER USER)
- DROP (DROP TABLE,DROP SEQUENCE,DROP VIEW)
- TRUNCATE
- RENAME
テーブル作成
# -*- coding: utf-8 -*-
import sqlite3
path = r"ファイルパス...test.db"
# 接続タイミングでデータベースがなければ生成
with sqlite3.connect(path) as conn :
# カーソル生成
cur = conn.cursor()
# 列型は下記の通り
# TEXT
# NUMERIC
# INTEGER
# REAL
# NONE
sql = (
"CREATE TABLE IF NOT EXISTS tablename ("
" ID INTEGER PRIMARY KEY,"
" NAME TEXT NOT NULL"
");"
)
# SQL実行
cur.execute(sql)
# カーソルを閉じる
cur.close()
ALTER TABLE tablename RENAME TO new_tablename;
ALTER TABLE tablename ADD COLUMN new_column TEXT;
ALTER TABLE talbename DROP COLUMN del_column;
レコード挿入
下記の例ではINSERTを使用しているが、列にKEYの設定があれば、REPLACEも使えちゃうので便利。
# -*- coding: utf-8 -*-
import sqlite3
path = r"ファイルパス...test.db"
# レコード追加
with sqlite3.connect(path) as conn :
# カーソル生成
cur = conn.cursor()
try :
# SQL実行
sql = f"INSERT INTO tablename ID, NAME VALUES (1, 'ONAMAE');"
cur.execute(sql)
# コミット
conn.commit()
except :
# ロールバック
conn.rollback()
finally :
# カーソルを閉じる
cur.close()
レコード取得
# -*- coding: utf-8 -*-
import sqlite3
path = r"ファイルパス...test.db"
# 接続タイミングでデータベースがなければ生成
with sqlite3.connect(path) as conn :
cur = conn.cursor()
# クエリ
sql = "SELECT * FROM tablename;"
# SQL実行
cur.execute(sql)
# 1件ずつ
while True :
rec = cur.fetchone()
if rec is None :
break
print(rec)
# SQL実行
cur.execute(sql)
# 全件(リスト表示)
print (cur.fetchall())
# カーソルを閉じる
cur.close()
列一覧を取得
通常、開発側が列の一覧を知りたいなんてことはないだろうけども、列名の一覧を取得したいのならば下記の方法でいける。
# -*- coding: utf-8 -*-
import sqlite3
path = r"ファイルパス...test.db"
# 列名ワーク
columns = []
# 取得処理開始
with sqlite3.connect(path) as conn :
# カーソルを生成
cur = conn.cursor()
# 1件読込
cur.execute("SELECT * FROM items LIMIT 1;")
# 列名を取得
for desc in cur.description:
columns.append(desc[0])
# カーソルを閉じる
cur.close()
