LoginSignup
0
1

More than 3 years have passed since last update.

【Python】SQLiteに触れてみた

Last updated at Posted at 2021-03-19

はじめに

筆者ですが、2021/3/19時点ではPython歴1週間未満の駆け出しプログラマなので
記事について誤りがある可能性がありますが、その際は教えていただけますと幸いです。

Pythonの基礎について一通り学習したので、
データベース(以下、DB)についての学習をはじめました。

SQLiteについて学習すれば、MySQLやPostgreSQLに関しても
ある程度理解はできるとのことなのでSQLiteを学習することにしました。

その時の備忘録としてこの記事を書いていきます。

なお、Macでの内容となりますので、Windwosの方は一部違う箇所があると思います。

SQLite3のインストール

SQLite3のインストールを行う前にHomebrewをインストールする必要があります。

ターミナルを開いて下記のコマンドを実行してください。
心配な方はHomebrew公式サイトをご覧ください。

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

インストール完了後、下記コマンドを実行します。

$ brew install sqlite3

パスワードなどを聞かれるので入力してあげればインストール完了です。

SQLite3を使ってみる

ということで準備が出来ましたので、実際にSQLiteを使ってみます。

まずはDBを作成してみたいと思います。

プロジェクト内は下記のようになります。
スクリーンショット 2021-03-19 13.15.04.jpg

下記のコマンドを実行します。

conn = sqlite3.connect("test_sqlite.db")はDBを作成、
conn.close()はDBへのアクセスを終了 という感じだと思います。

import sqlite3

conn = sqlite3.connect('test_sqlite.db')
conn.close()

こちらを実行すると、新しくファイルが追加されていることが確認出来ます。
スクリーンショット 2021-03-19 13.19.41.jpg

DBではテーブルというものを使いデータを保管しているらしいのですが、
そのテーブルについての定義方法について解説します。

DBを操作する際にはカーソルを宣言し、そのカーソルに対して処理を指示するらしいです。

みなさんもPCを操作するさにカーソルを動かして操作すると思いますが、
そのようなイメージになります。

次のコマンドではカーソルを宣言し、テーブルの定義をしています。
また、最後に設定を反映させるためのcommit()を忘れないようにしてください。

conn = sqlite3.connect("test_sqlite.db")

curs = conn.cursor()

curs.execute('CREATE TABLE persons(id INTEGER PRIMARY KEY AUTOINCREMENT, name STRING)')
conn.commit()

conn.close()

下記のコードはSQLの構文になります。
CREATE TABLE persons(id INTEGER PRIMARY KEY AUTOINCREMENT, name STRING

何をしているのかというと、
CREATE TABLE persons()でpersonsというテーブルを定義しています。

そのpersonsの中にどのような情報を格納するのかというと、idnameです。
また、それらの単語の直後に記載されているものが型になります。

つまり、id(int型)name(string型)ということになります。

idの方にはid INTEGER PRIMARY KEY AUTOINCREMENTと記載されていますが、
これは、nameの個数に対してidを1つずつ増やしてくださいね。的な内容です。

nameジョンという値を入れたら、idには1が入り、
nameナンシーという値を入れたら、1増えてidには2が入ります。

実際にコードを実行したらターミナルで下記コマンドを実行して確認してみます。

$ sqlite3 test_sqlite.db 

すると、対話状態になると思います。
対話状態になったら下記コマンドを実行し、personsと表示されたらテーブルが出来ています。

sqlite> .tables
persons
sqlite>

では、実際にデータを格納していきたいと思います。
データを入れるにはINSERTを使用します。

personsのnameにMikeというvaluesを格納してください。
みたいな感じですね!

先ほどのテーブルを作る際のコマンドが残っていると、
すでにテーブルが存在しています。と言った内容のエラーが出るかもしれないので、
すでにテーブルを定義している方はコメントアウトしておいてください。

curs.execute('INSERT INTO persons(name) values("Mike")')
curs.execute('INSERT INTO persons(name) values("Jon")')
curs.execute('INSERT INTO persons(name) values("Nancy")')

conn.commit()

では、ターミナルでデータが入っているか確認したいと思います。
SELECT * from persons;で確認します。

1|Mike
2|Jon
3|Nancy

と表示されたらOKです。

$ sqlite3 test_sqlite.db
sqlite> SELECT * from persons;
1|Mike
2|Jon
3|Nancy
sqlite> 

もしくは、pythonで下記コマンドでも確認出来ます。

curs.execute('SELECT * from persons')
print(curs.fetchall())

データのアップデートは下記のコマンドで行います。
MikeMichelに変更する場合のコマンドです。

curs.execute('UPDATE persons set name = "Michel" WHERE name = "Mike"')
conn.commit()

curs.execute("SELECT * from persons")
print(curs.fetchall())

実行結果
[(1, 'Michel'), (2, 'Jon'), (3, 'Nancy')]

確認するとMichelに変わっているのが確認出来ます。

次にデータの削除を行います。

データの削除はDELETEで行います。
テーブルを指定する場合はDELETE FROM <テーブル名>という形で記述します。

curs.execute('DELETE FROM persons WHERE name = "Michel"')
conn.commit()

curs.execute("SELECT * from persons")
print(curs.fetchall())

実行結果
(2, 'Jon'), (3, 'Nancy')]

Michelがいなくなっていることがわかります。

このようにしてデータの操作を行っていきます。

最後にDBの操作を終了する際に、
最後に下記コマンドを記述することを忘れないようにしてください。

curs.close()
conn.close()

また、今回の作業を行っていて、
一度記述して実行したコマンドをコメントアウトや削除して、
同じコマンドを実行しないようにしていました。

毎回そのような作業をするのは面倒なので、
最初にDBファイルを作成した箇所を下記のように書き換えます。

# conn = sqlite3.connect("test_sqlite.db")
conn = sqlite3.connect(':memory:')

これはmemory上にDBを作成するということになります。

なお、memory上のデータはプログラミングが終了すると
自動で開放されるので毎回実行することが出来ます。

いちいちコメントアウトなどをしなくてすむのでお勧めです!

さいごに

SQLの構文も覚えなければならないので少々大変ですが、
Pythonを使う上ではDBは絶対に必要な知識だと聞いたことがあるので、
ぜひ一緒に覚えましょう...!

以上、最後までご覧いただきありがとうございました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1