📌

【Python】MySQLとSQLiteの違いと、始めかた

2023/04/14に公開

SQLite と MySQL って何が違うの?

まずは、MySQL と SQLite の違いをサックリ紹介します。
でもあなたの調べごとの目的が「始め方」なら読み飛ばしていいです。

管理の違い

MySQL は、データベースを複数作ることができます。
ユーザ機能もあり、その権限に応じたテーブルやデータベースが閲覧・編集可能になります。

SQLiteは、一つのデータベースに対して一つのファイルが作成されます。
ユーザ機能等はなく、全てのテーブルにアクセス・編集することができます。

アクセス方法の違い

MySQL は、管理するプログラムを起動し、そのプログラムに対して要求を送信することで中身のデータをやりとりします。

SQLite のアクセス先は、ファイルです。
そのため、プログラムを起動するなどの手間がありません。

データの扱いの違い

MySQL は、数値を扱うINT、文字列を扱うVARCHARなどのほかに、日付や時刻を扱うDATE, TIMEなど、さまざま存在します。

SQLite は、数値のINTEGER, REAL、文字列を扱うTEXTなど、計4つしかありません。

使ってみよう

import sqlite3

SQLite は手軽に始められます。
なぜなら、SQLite用のライブラリが標準で導入されているからです。

使うライブラリはsqlite3です。

データベースを作成する

# データベースの名前
db = 'database.db'

# データベースにアクセス
# なければファイル生成
connect = sqlite3.connect(db)

SQLite のデータベースはファイルでした。
ファイル名を設定して、.connect()します。
データベースに接続するためのオブジェクトを返してくれます。

ファイルが無ければ勝手に生成されます。

データベースを操作してみる

# カーソルを生成
cursor = connect.cursor()

# SQLを作成して実行してみる
sql = 'CREATE TABLE sample ( name TEXT, age INTEGER );'
cursor.execute(sql)

データベースにアクセスしてみます。

.connect()で生成したオブジェクトに.cursor()を実行すると、指示するためのカーソルを取得できます。
カーソルに.execute()にSQLを渡してあげると実行してくれます。

SQLの実行結果を受け取る

results = cursor.fetchall()
for result in results:
    print(result)

SQLを実行した結果を受け取る場合は、カーソルに.fetchall()を実行すると、リストで返してくれます。

当然ですが、CREATEUPDATEなどデータを取得するものでない場合は空の行列が帰ってきます。

終了前にすること

# カーソルを終了
cursor.close()

# 変更を適用
connect.commit()

# 接続を終了
connect.close()

カーソル、接続は.close()で行うことができます。
何か変更したなら、.commit()も忘れずに。

これで SQLite 練習し放題!

ここまでできたら、練習し放題ですね。
SHOW TABLESとか、SHOW COLUMNSとか結構違う部分もありますが、それは適宜自分で調べてください。

それも練習ですよ。

え、知りたい? しょうがないなあ。

# SHOW TABLES
sql = 'SELECT name FROM sqlite_master WHERE type="table";'

# SHOW COLUMNS FROM table
table = 'sample'
sql = f'PRAGMA table_info({table});'

調べるの面倒くさいからね。仕方ないね。

SQLiteとの対話用ファイル作りました

これ準備するのも面倒な人は、SQLiteと存分に対話し放題なソースコードを作りました。
ダウンロードもコピーもご自由にどうぞ。

下の埋め込みのファイル名を右クリック→"名前を付けてリンク先を保存"でダウンロードできます。
https://github.com/Unico417/MyUtils/blob/main/Python/sqlite3/sqlite_controller.py

Discussion