【Python】MySQLとSQLiteの違いと、始めかた
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()
を実行すると、リストで返してくれます。
当然ですが、CREATE
やUPDATE
などデータを取得するものでない場合は空の行列が帰ってきます。
終了前にすること
# カーソルを終了
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と存分に対話し放題なソースコードを作りました。
ダウンロードもコピーもご自由にどうぞ。
下の埋め込みのファイル名を右クリック→"名前を付けてリンク先を保存"でダウンロードできます。
Discussion