SQL - Python - DELETE文とUPDATE文 - 役に立つ変更 - WHERE句
Head First SQL ―頭とからだで覚えるSQLの基本、 Lynn Beighley(著)、 佐藤 直生(監訳)、 松永 多苗子(翻訳)、 オライリージャパンの 3章(DELETE文とUPDATE文 - 役に立つ変更)、p.133(WHERE句を伴うDELETE文になってみよう)の解答を求めてみる。
schema3_0.sql
drop table if exists doughnut_ratings;
create table doughnut_ratings(
location text,
time text,
date text,
type text,
rating integer,
comments text
);
insert into doughnut_ratings (
location,
time,
date,
type,
rating,
comments
) values
('クリスピーキング', '午前 8:50', '9/27', 'プレーンキレーズド', 10, 'ほとんど完壁'),
('ダンカンズドーナツ', '午前 8:59', '8/25', NULL, 6, '油っこい'),
('スターバズコーヒー', '午後 7:35', '5/24', 'シナモンケーキ', 5, '堅いけど、おいしい'),
('スターバズコーヒー', '午後 7:03', '4/26', 'シャム', 7, 'シャムが足りない');
schema3_1.sql
delete from doughnut_ratings
where location = 'クリスピーキング'
and rating <> 6;
schema3_2.sql
delete from doughnut_ratings
where location = 'クリスピーキング'
and rating = 3;
schema3_3.sql
delete from doughnut_ratings
where location = 'スナッピーベーグル'
and rating >= 6;
schema3_4.sql
delete from doughnut_ratings
where location = 'クリスピーキング'
or rating > 5;
schema3_5.sql
delete from doughnut_ratings
where location = 'クリスピーキング'
or rating = 3;
コード
sample3.py
#! /usr/bin/env python3
import sqlite3
con = sqlite3.connect('sample.sqlite')
cur = con.cursor()
for i in range(12):
if i % 2 == 0:
with open(f'schema3_0.sql') as f:
cur.executescript(f.read())
else:
with open(f'schema3_{i // 2 + 1}.sql') as f:
cur.executescript(f.read())
cur.execute(
"""
select * from doughnut_ratings
"""
)
if (d := cur.description) is not None:
print([t[0] for t in d])
for row in cur.fetchall():
print(row)
cur.close()
con.close()
入出力結果(Terminal, Zsh)
% ./sample3.py
['location', 'time', 'date', 'type', 'rating', 'comments']
('クリスピーキング', '午前 8:50', '9/27', 'プレーンキレーズド', 10, 'ほとんど完壁')
('ダンカンズドーナツ', '午前 8:59', '8/25', None, 6, '油っこい')
('スターバズコーヒー', '午後 7:35', '5/24', 'シナモンケーキ', 5, '堅いけど、おいしい')
('スターバズコーヒー', '午後 7:03', '4/26', 'シャム', 7, 'シャムが足りない')
['location', 'time', 'date', 'type', 'rating', 'comments']
('ダンカンズドーナツ', '午前 8:59', '8/25', None, 6, '油っこい')
('スターバズコーヒー', '午後 7:35', '5/24', 'シナモンケーキ', 5, '堅いけど、おいしい')
('スターバズコーヒー', '午後 7:03', '4/26', 'シャム', 7, 'シャムが足りない')
['location', 'time', 'date', 'type', 'rating', 'comments']
('クリスピーキング', '午前 8:50', '9/27', 'プレーンキレーズド', 10, 'ほとんど完壁')
('ダンカンズドーナツ', '午前 8:59', '8/25', None, 6, '油っこい')
('スターバズコーヒー', '午後 7:35', '5/24', 'シナモンケーキ', 5, '堅いけど、おいしい')
('スターバズコーヒー', '午後 7:03', '4/26', 'シャム', 7, 'シャムが足りない')
['location', 'time', 'date', 'type', 'rating', 'comments']
('クリスピーキング', '午前 8:50', '9/27', 'プレーンキレーズド', 10, 'ほとんど完壁')
('ダンカンズドーナツ', '午前 8:59', '8/25', None, 6, '油っこい')
('スターバズコーヒー', '午後 7:35', '5/24', 'シナモンケーキ', 5, '堅いけど、おいしい')
('スターバズコーヒー', '午後 7:03', '4/26', 'シャム', 7, 'シャムが足りない')
['location', 'time', 'date', 'type', 'rating', 'comments']
('クリスピーキング', '午前 8:50', '9/27', 'プレーンキレーズド', 10, 'ほとんど完壁')
('ダンカンズドーナツ', '午前 8:59', '8/25', None, 6, '油っこい')
('スターバズコーヒー', '午後 7:35', '5/24', 'シナモンケーキ', 5, '堅いけど、おいしい')
('スターバズコーヒー', '午後 7:03', '4/26', 'シャム', 7, 'シャムが足りない')
['location', 'time', 'date', 'type', 'rating', 'comments']
('クリスピーキング', '午前 8:50', '9/27', 'プレーンキレーズド', 10, 'ほとんど完壁')
('ダンカンズドーナツ', '午前 8:59', '8/25', None, 6, '油っこい')
('スターバズコーヒー', '午後 7:35', '5/24', 'シナモンケーキ', 5, '堅いけど、おいしい')
('スターバズコーヒー', '午後 7:03', '4/26', 'シャム', 7, 'シャムが足りない')
['location', 'time', 'date', 'type', 'rating', 'comments']
('クリスピーキング', '午前 8:50', '9/27', 'プレーンキレーズド', 10, 'ほとんど完壁')
('ダンカンズドーナツ', '午前 8:59', '8/25', None, 6, '油っこい')
('スターバズコーヒー', '午後 7:35', '5/24', 'シナモンケーキ', 5, '堅いけど、おいしい')
('スターバズコーヒー', '午後 7:03', '4/26', 'シャム', 7, 'シャムが足りない')
['location', 'time', 'date', 'type', 'rating', 'comments']
('スターバズコーヒー', '午後 7:35', '5/24', 'シナモンケーキ', 5, '堅いけど、おいしい')
['location', 'time', 'date', 'type', 'rating', 'comments']
('クリスピーキング', '午前 8:50', '9/27', 'プレーンキレーズド', 10, 'ほとんど完壁')
('ダンカンズドーナツ', '午前 8:59', '8/25', None, 6, '油っこい')
('スターバズコーヒー', '午後 7:35', '5/24', 'シナモンケーキ', 5, '堅いけど、おいしい')
('スターバズコーヒー', '午後 7:03', '4/26', 'シャム', 7, 'シャムが足りない')
['location', 'time', 'date', 'type', 'rating', 'comments']
('ダンカンズドーナツ', '午前 8:59', '8/25', None, 6, '油っこい')
('スターバズコーヒー', '午後 7:35', '5/24', 'シナモンケーキ', 5, '堅いけど、おいしい')
('スターバズコーヒー', '午後 7:03', '4/26', 'シャム', 7, 'シャムが足りない')
['location', 'time', 'date', 'type', 'rating', 'comments']
('クリスピーキング', '午前 8:50', '9/27', 'プレーンキレーズド', 10, 'ほとんど完壁')
('ダンカンズドーナツ', '午前 8:59', '8/25', None, 6, '油っこい')
('スターバズコーヒー', '午後 7:35', '5/24', 'シナモンケーキ', 5, '堅いけど、おいしい')
('スターバズコーヒー', '午後 7:03', '4/26', 'シャム', 7, 'シャムが足りない')
['location', 'time', 'date', 'type', 'rating', 'comments']
('クリスピーキング', '午前 8:50', '9/27', 'プレーンキレーズド', 10, 'ほとんど完壁')
('ダンカンズドーナツ', '午前 8:59', '8/25', None, 6, '油っこい')
('スターバズコーヒー', '午後 7:35', '5/24', 'シナモンケーキ', 5, '堅いけど、おいしい')
('スターバズコーヒー', '午後 7:03', '4/26', 'シャム', 7, 'シャムが足りない')
%