おすすめアイテムをいくつか紹介

広告ブロックがONになっていると表示されないことがあります。

【Python】DBの使い方-SQLite

こんにちは!
はるさらと申します。

今回はPythonの練習がてら
SQLiteへの接続方法を
備忘録として残しておきます。

 

開発環境

PyCharm を使用しております。
コピペしていただければ
同じ挙動が出来るように作成しております。

他のPythonの記事はこちらから参照できます♪

 

今回の目標

今回は最低限の動作として

実行する事でPython上から
DB上にテーブルを作成し、
行の追加を行った後に
テーブルに登録されている内容の表示。

まで、実施したいと思います。

 

コーディング

import sqlite3

# テーブルの作成
# con = sqlite3.connect(":memory:")
con = sqlite3.connect("test.db",isolation_level=None)
c = con.cursor()

create_table = '''create table harusara1125 (id integer primary key, Day date, Place varchar2(32))'''
c.execute(create_table)

# データの追加
sql = 'insert into harusara1125 (Day, Place) values ' \
'(date("2020-01-01"),"東京"),' \
'(date("2020-03-03"),"愛媛"),' \
'(date("2020-05-05"),"鹿児島"),' \
'(date("2020-07-07"),"愛知"),' \
'(date("2020-10-10"),"岩手")'

c.execute(sql)

# データの表示
for a in c.execute("select * from harusara1125"):
print(a)

con.close()

※すみません。インデントのずれは後に修正します。

 

処理の解説

【1行目】
SQLiteを使用するために、sqlite3をインポートする必要があります。

 

【4~5行目】
データベースを作成しています。

4行目の様に
con = sqlite3.connect(“:memory:”)
と記載すると、ファイルを作成せずに
メモリ上にDBを作成します。
(接続を閉じると消えますので
一時的に使用する際にはこちらで良いと思います。)

 

一方、5行目の様に
con = sqlite3.connect(“test.db”,isolation_level=None)
と記載すると、「test.db」というファイルが作成され
その中に、テーブルや業などが作成されていきます。

一度作成したDBを保存しておきたい場合、
他のプログラムでも使用したい場合などは
こちらの方法でDBを作成してください。

なお、「isolation_level=None」の記載は
自動コミット(※)の設定になります。

 

※自動コミットについて
5行目には「isolation_level=None」といった
記載がありますが
こちらを記載することで
意識せずとも自動でコミットしてくれます。

もし、記載しない場合は
con.commit()
を別途記載してあげましょう!

コミットを忘れると、
「テーブルの中に値が入っていない!」
と、ちょっとしたパニックにつながります。

 

【8~9行目】
「harusara1125」というテーブルを作成しています。

「項目」
列1 列名:Id 型:int
列2 列名:Day 型:date
列3 列名:Place 型:varchar(32)

列1のidという項目には
自動インクリメントを設定しています。
「integer primary key」

これによって、次に行うinsert文で
IDを指定しなくても
自動的に1から順に採番していってくれます。

 

【12~19行目】
作成したテーブルにレコードを追加しています。
追加する行ごとにinsert文を記載せずとも
コードに書いてあるようにまとめて複数行
作成することが可能です。

 

【22~23行目】
select文を使用して、テーブルの中身を表示しています。
for文を使用することで、
複数行取得できた場合でもすべて表示させることが可能です!

 

今日はここまで

最低限、DBを作成して
動かしてみる~といったところまで
記載しました。

他にも重要な構文などは
沢山ありますので
随時、追加か
別の記事に起こしたいと思います!

 

それではまたー!!