![見出し画像](https://assets.st-note.com/production/uploads/images/41577050/rectangle_large_type_2_a6fae80969aeadd6c5b649985f40c069.png?width=1200)
Python(基礎編:SQLiteを使ってみよう)
おはようございます自由人たち!今日はSQLiteについて勉強していきます。
SQLiteとは
ひとことで言うとデータベースです。
■ 特徴
・オープンソースで、軽量、コンパクト、省メモリ。
・Excelのように1行ずつデータ1個分が格納される。
・サーバがいらない。
・ライブラリとして使えるので設定がいらない。
・サーバーやパソコンOSだけでなく、スマホOSでも使える。
・データ型の指定を強制しない。
今回もPycharmに書いていきます。
新規プロジェクト作成
「ファイル」から「新規プロジェクト」を作成する。
「lesson6」を作る。フォルダ名を入力して、作成ボタンを押す。
Pythonファイルを追加する
データベースを作成するファイルを作成します。
「create_db.py」をつくります。
できました。
ではコードを書いていきます。
「sqlite」モジュール
・標準でついているモジュール。(モジュールとは=部品)
・インポートするだけで使える。
作成した「create_db.py」にコードを書いていきます。
import sqlite3
これでもう使えるようになりました。
データベースをつくる
【接続】
connection = sqlite3.connect('dbファイルパス')
(指定したDBファイルが存在しない場合は自動で作成してくれる。)
db = 'otamesi.sqlite'
# 接続する
conn = sqlite3.connect(db)
# 閉じる(必須)
conn.close()
データベースの拡張子は「.sqlite」 になりました。
試しに「db = 'otamesi.db'」と書いて実行すると、「otamesi.db」ができました。
import sqlite3
# dbという変数ににファイル名を入れる。
db = 'otamesi.sqlite'
# 接続。なければDBを作成する。
conn = sqlite3.connect(db)
# コネクションを閉じる
conn.close()
▶ 実行すると、エラーなく完了。
テーブルをつくる(CREATE TABLE)
pyファイルが作成されたら次はsozというテーブルを作ります。
テーブルを作るために、「sqlite」を操作する「cursor」オブジェクトを使います。
「cursor」オブジェクト「c」を作り、「excecute」メソッドでSQLを実行する。
conn = sqlite3.connect(db)
c = conn.cursor()
c.execute( 実行したいSQL )
c.execute('CREATE TABLE soz (id INTEGER PRIMARY KEY, name TEXT)')
コード
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()
▶ 実行すると、エラーなく完了する。
しかし実行を二回するとエラーになるので、次のことをします。
もし同じテーブルがあれば削除する
(DROP TABLE IF EXISTS)
テーブルを作る前に、作ろうとしているテーブルと同じ名前のテーブルがある場合は、エラーになるので「削除する」という一文を入れる。
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()
同じテーブルがあると削除してから作るので、エラーがでなくなりました。
データを挿入する(INSERT INTO)
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()
▶ 実行すると、エラーなく完了。
これで、データベースに値も挿入されました。
しかし、直接みることはできないらしい。
次に、そのデータを取り出してみたいと思います。
データを取得する(SELECT)
「select_db.py」を作る
c.execute('SELECT * FROM soz order by id')
・データを取るだけなので「conn.commit()はいらない」
データを表示する(print)
・ 全部取得(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()
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()
・ 件数を取得(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()
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()
・ 一個ずつ取得(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()
更新する(UPDATE)
「update_db.py」をつくる。
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()
「select_db.py」を実行して確認します。
「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)
更新の中に「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()
消えました。
SQLが苦手だからすごい難しい。SQLも今度勉強しようとおもいます・・。
今日はここまでぇ!
いいなと思ったら応援しよう!
![SOZ](https://assets.st-note.com/production/uploads/images/60663256/profile_ae85e9a69bd6517183591fff9154adf7.png?width=600&crop=1:1,smart)