Python (sqlite3)

データベース取り扱いの前提

データ定義言語 (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()

タイトルとURLをコピーしました