見出し画像

Python(基礎編:SQLiteを使ってみよう)

おはようございます自由人たち!今日はSQLiteについて勉強していきます。

SQLiteとは

画像1

ひとことで言うとデータベースです。 

■ 特徴
・オープンソースで、軽量、コンパクト、省メモリ。
・Excelのように1行ずつデータ1個分が格納される。
・サーバがいらない。
・ライブラリとして使えるので設定がいらない。
・サーバーやパソコンOSだけでなく、スマホOSでも使える。
・データ型の指定を強制しない。

今回もPycharmに書いていきます。

新規プロジェクト作成

画像2

「ファイル」から「新規プロジェクト」を作成する。

画像3

「lesson6」を作る。フォルダ名を入力して、作成ボタンを押す。

画像4

Pythonファイルを追加する

画像5

データベースを作成するファイルを作成します。

画像6

「create_db.py」をつくります。

画像7

できました。

画像8

ではコードを書いていきます。

「sqlite」モジュール

画像9

・標準でついているモジュール。(モジュールとは=部品)
・インポートするだけで使える。

作成した「create_db.py」にコードを書いていきます。

import sqlite3

画像10

これでもう使えるようになりました。

データベースをつくる

画像11

【接続】
connection = sqlite3.connect('dbファイルパス')
(指定したDBファイルが存在しない場合は自動で作成してくれる。)
db = 'otamesi.sqlite'
# 接続する
conn = sqlite3.connect(db)

# 閉じる(必須)
conn.close()

データベースの拡張子は「.sqlite」 になりました。

試しに「db = 'otamesi.db'」と書いて実行すると、「otamesi.db」ができました。

画像12

画像13

import sqlite3

# dbという変数ににファイル名を入れる。
db = 'otamesi.sqlite'

# 接続。なければDBを作成する。
conn = sqlite3.connect(db)

# コネクションを閉じる
conn.close()

画像14

▶ 実行すると、エラーなく完了。

画像15

テーブルをつくる(CREATE TABLE)

画像16

画像17

画像18

pyファイルが作成されたら次はsozというテーブルを作ります。

テーブルを作るために、「sqlite」を操作する「cursor」オブジェクトを使います。

「cursor」オブジェクト「c」を作り、「excecute」メソッドでSQLを実行する。
conn = sqlite3.connect(db)
c = conn.cursor()
c.execute( 実行したいSQL )

画像48

c.execute('CREATE TABLE soz (id INTEGER PRIMARY KEY, name TEXT)')

画像49

コード

import sqlite3

db = 'otamesi.sqlite'
conn = sqlite3.connect(db)
c = conn.cursor()

# sozというテーブルを作る(id:一意の数値,name:テキスト)
c.execute('CREATE TABLE soz (id INTEGER PRIMARY KEY, name TEXT)')

# コミット
conn.commit()

# コネクションを閉じる
conn.close()

画像20

▶ 実行すると、エラーなく完了する。

画像21

しかし実行を二回するとエラーになるので、次のことをします。

もし同じテーブルがあれば削除する
(DROP TABLE IF EXISTS)

画像22

テーブルを作る前に、作ろうとしているテーブルと同じ名前のテーブルがある場合は、エラーになるので「削除する」という一文を入れる。

c.execute('DROP TABLE IF EXISTS soz')

コード

import sqlite3

db = 'otamesi.sqlite'
conn = sqlite3.connect(db)
c = conn.cursor()

# sozというテーブルがあれば削除する
c.execute('DROP TABLE IF EXISTS soz')

# sozというテーブルを作る(id:一意の数値,name:テキスト)
c.execute('CREATE TABLE soz (id INTEGER PRIMARY KEY, name TEXT)')

# コミット
conn.commit()

# コネクションを閉じる
conn.close()

画像23

同じテーブルがあると削除してから作るので、エラーがでなくなりました。

データを挿入する(INSERT INTO)

画像24

INSERT INTO soz VALUES(1, 'Danny')

c.execute()で実行する。

c.execute("INSERT INTO soz VALUES(1, 'Danny')")
c.execute("INSERT INTO soz VALUES(2, ?)",("Tonny",))
c.execute("INSERT INTO soz VALUES(?, ?)",(3, 'Eimmy'))
c.execute("INSERT INTO soz VALUES(:id, :name)", {'id':4, 'name':'john'})

コード

import sqlite3

db = 'otamesi.sqlite'
conn = sqlite3.connect(db)
c = conn.cursor()

# sozというテーブルがあれば削除する
c.execute('DROP TABLE IF EXISTS soz')

# sozというテーブルを作る(id:一意の数値,name:テキスト)
c.execute('CREATE TABLE soz (id INTEGER PRIMARY KEY, name TEXT)')

# データを挿入する
c.execute("INSERT INTO soz VALUES(1, 'Danny')")
c.execute("INSERT INTO soz VALUES(2, ?)",("Tonny",))
c.execute("INSERT INTO soz VALUES(?, ?)",(3, 'Eimmy'))
c.execute("INSERT INTO soz VALUES(:id, :name)", {'id':4, 'name':'john'})

# コミット
conn.commit()

# コネクションを閉じる
conn.close()

画像25

▶ 実行すると、エラーなく完了。

画像26

これで、データベースに値も挿入されました。
しかし、直接みることはできないらしい。

画像27

次に、そのデータを取り出してみたいと思います。

データを取得する(SELECT)

画像28

「select_db.py」を作る

画像29

画像30

c.execute('SELECT * FROM soz order by id')

画像50

・データを取るだけなので「conn.commit()はいらない」

データを表示する(print)

画像31

・ 全部取得(fetchall)

import sqlite3

db = 'otamesi.sqlite'
conn = sqlite3.connect(db)
c = conn.cursor()

try:
   # セレクト文
   c.execute('SELECT * FROM soz order by id')
   
   # 全種類
   fetchall = c.fetchall()
   for row in fetchall:
       print(row)
except sqlite3.Error as e:
   print(e.arg[0])

# コネクションを閉じる
conn.close()

画像32

画像33

import sqlite3

db = 'otamesi.sqlite'
conn = sqlite3.connect(db)
c = conn.cursor()

try:
   # セレクト文
   c.execute('SELECT * FROM soz order by id')
   # 全種類
   fetchall = c.fetchall()
   for row in fetchall:
       print("IDは{} そして なまえは{}".format(row[0], row[1]))
except sqlite3.Error as e:
   print(e.arg[0])
   
# コネクションを閉じる
conn.close()

画像34

・ 件数を取得(len)

import sqlite3

db = 'otamesi.sqlite'
conn = sqlite3.connect(db)
c = conn.cursor()

try:
   # セレクト文
   c.execute('SELECT * FROM soz order by id')
   # 全種類
   fetchall = c.fetchall()
   for row in fetchall:
       print("IDは{} そして なまえは{}".format(row[0], row[1]))
   #件数を数値で出す     
   print(len(fetchall))
   
except sqlite3.Error as e:
   print(e.arg[0])

# コネクションを閉じる
conn.close()

画像35

import sqlite3

db = 'otamesi.sqlite'
conn = sqlite3.connect(db)
c = conn.cursor()

try:
   # セレクト文
   c.execute('SELECT * FROM soz order by id')
   # 全種類
   fetchall = c.fetchall()
   for row in fetchall:
       print("IDは{} そして なまえは{}".format(row[0], row[1]))
   # 件数を文字列で
   print(str(len(fetchall)) + "個のデータ")
except sqlite3.Error as e:
   print(e.arg[0])

# コネクションを閉じる
conn.close()

画像36

・ 一個ずつ取得(fetchaone)

import sqlite3

db = 'otamesi.sqlite'
conn = sqlite3.connect(db)
c = conn.cursor()

try:
   c.execute('SELECT * FROM soz order by id')
   # 一個ずつ取得
   print(c.fetchone())
   print(c.fetchone())
except sqlite3.Error as e:
   print(e.arg[0])
   
# コネクションを閉じる
conn.close()

画像37

更新する(UPDATE)

画像38

「update_db.py」をつくる。

画像39

画像40

import sqlite3

db = 'otamesi.sqlite'
conn = sqlite3.connect(db)
c = conn.cursor()

try:
   c.execute('UPDATE soz set name = ? where id = ?', ('Bonny', 2))
except sqlite3.Error as e:
   print(e.args[0])
   
conn.commit()
conn.close()

画像41

画像42

画像43

「select_db.py」を実行して確認します。

画像44

「Tonny」が「Bonny」になりましたー!

下記のように書く方がわかりやすいです。👇 (同じ結果になるよ)

import sqlite3

db = 'otamesi.sqlite'
conn = sqlite3.connect(db)
c = conn.cursor()

try:
   sql = 'UPDATE soz set name = ? where id = ?'
   stmt = ('Bonny', 2)
   c.execute(sql, stmt)
except sqlite3.Error as e:
   print(e.args[0])
   
conn.commit()
conn.close()

削除(DELETE)

画像45

更新の中に「DELETE」をかいていきます。

import sqlite3

db = 'otamesi.sqlite'
conn = sqlite3.connect(db)
c = conn.cursor()

try:
   # 削除
   sql = 'DELETE FROM soz where id = ?'
   stmt = (3,)
   c.execute(sql, stmt)
except sqlite3.Error as e:
   print(e.args[0])
   
conn.commit()
conn.close()

画像46

消えました。

SQLが苦手だからすごい難しい。SQLも今度勉強しようとおもいます・・。

今日はここまでぇ!

画像47

画像48











なにとぞ なにとぞー