計算機科学のブログ

SQL - SQLite - Python - 高度なSELECT文 - 新たな目でデータを見る - アルファベット順

Head First SQL ―頭とからだで覚えるSQLの基本Lynn Beighley(著)、 佐藤 直生(監訳)、 松永 多苗子(翻訳)、 オライリージャパンの 6章(高度なSELECT文 - 新たな目でデータを見る)、p.251(自分で考えてみよう)の解答を求めてみる。

schema4.sql

insert into movie_table
(title, category)
values
('アー・ユー・ペイイング・アテンション','ファミリー'),
('アクティング・アップ','ファミリー'),
('アー・ユー・マイ・マザー?','ファミリー'),
('アンディのため息','ファミリー'),
('アフター・ザクラウン・リーブス','ファミリー');

schema4_0.sql

select title, category from movie_table
where title like 'ア%'
and 
category = 'ファミリー';

コード

sample4.py

#! /usr/bin/env python3
import sqlite3

con = sqlite3.connect('sample.db')
cur = con.cursor()


def p(cur: sqlite3.Cursor, table: str):
    cur.execute(
        f"""
select * from {table}
"""
    )
    if (d := cur.description) is not None:
        print([t[0] for t in d])
    for row in cur.fetchall():
        print(row)


p(cur, 'movie_table')

with open(f'schema4.sql') as f:
    cur.executescript(f.read())
con.commit()
p(cur, 'movie_table')

with open(f'schema4_0.sql') as f:
    cur.execute(f.read())
if (d := cur.description) is not None:
    print([t[0] for t in d])
for row in sorted(cur.fetchall(), key=lambda x: x[0]):
    print(row)
cur.close()
con.close()

入出力結果(Terminal, Zsh)

% ./sample4.py  
['title', 'rating', 'category']
('ビッグ・アドベンチャー', 'G', None)
('グレッグ:語られざる物語', 'PG', None)
('狂った道化師', 'R', 'ホラー')
('13日の金曜日恐怖症', 'R', 'アクション')
('ねずみのダーシー', 'G', None)
('エンド・オブ・ザ・ライン', 'R', 'ホラー')
('シャイニー・シングス', 'PG', None)
('テイク・イット・バック', 'R', 'コメディ')
('サメの餌', 'G', None)
('怒れる海賊', 'PG', None)
('人間が住めるかもしれない惑星', 'PG', None)
('アー・ユー・ペイイング・アテンション', None, 'ファミリー')
('アクティング・アップ', None, 'ファミリー')
('アー・ユー・マイ・マザー?', None, 'ファミリー')
('アンディのため息', None, 'ファミリー')
('アフター・ザクラウン・リーブス', None, 'ファミリー')
('アー・ユー・ペイイング・アテンション', None, 'ファミリー')
('アクティング・アップ', None, 'ファミリー')
('アー・ユー・マイ・マザー?', None, 'ファミリー')
('アンディのため息', None, 'ファミリー')
('アフター・ザクラウン・リーブス', None, 'ファミリー')
('アー・ユー・ペイイング・アテンション', None, 'ファミリー')
('アクティング・アップ', None, 'ファミリー')
('アー・ユー・マイ・マザー?', None, 'ファミリー')
('アンディのため息', None, 'ファミリー')
('アフター・ザクラウン・リーブス', None, 'ファミリー')
['title', 'rating', 'category']
('ビッグ・アドベンチャー', 'G', None)
('グレッグ:語られざる物語', 'PG', None)
('狂った道化師', 'R', 'ホラー')
('13日の金曜日恐怖症', 'R', 'アクション')
('ねずみのダーシー', 'G', None)
('エンド・オブ・ザ・ライン', 'R', 'ホラー')
('シャイニー・シングス', 'PG', None)
('テイク・イット・バック', 'R', 'コメディ')
('サメの餌', 'G', None)
('怒れる海賊', 'PG', None)
('人間が住めるかもしれない惑星', 'PG', None)
('アー・ユー・ペイイング・アテンション', None, 'ファミリー')
('アクティング・アップ', None, 'ファミリー')
('アー・ユー・マイ・マザー?', None, 'ファミリー')
('アンディのため息', None, 'ファミリー')
('アフター・ザクラウン・リーブス', None, 'ファミリー')
('アー・ユー・ペイイング・アテンション', None, 'ファミリー')
('アクティング・アップ', None, 'ファミリー')
('アー・ユー・マイ・マザー?', None, 'ファミリー')
('アンディのため息', None, 'ファミリー')
('アフター・ザクラウン・リーブス', None, 'ファミリー')
('アー・ユー・ペイイング・アテンション', None, 'ファミリー')
('アクティング・アップ', None, 'ファミリー')
('アー・ユー・マイ・マザー?', None, 'ファミリー')
('アンディのため息', None, 'ファミリー')
('アフター・ザクラウン・リーブス', None, 'ファミリー')
('アー・ユー・ペイイング・アテンション', None, 'ファミリー')
('アクティング・アップ', None, 'ファミリー')
('アー・ユー・マイ・マザー?', None, 'ファミリー')
('アンディのため息', None, 'ファミリー')
('アフター・ザクラウン・リーブス', None, 'ファミリー')
['title', 'category']
('アクティング・アップ', 'ファミリー')
('アクティング・アップ', 'ファミリー')
('アクティング・アップ', 'ファミリー')
('アクティング・アップ', 'ファミリー')
('アフター・ザクラウン・リーブス', 'ファミリー')
('アフター・ザクラウン・リーブス', 'ファミリー')
('アフター・ザクラウン・リーブス', 'ファミリー')
('アフター・ザクラウン・リーブス', 'ファミリー')
('アンディのため息', 'ファミリー')
('アンディのため息', 'ファミリー')
('アンディのため息', 'ファミリー')
('アンディのため息', 'ファミリー')
('アー・ユー・ペイイング・アテンション', 'ファミリー')
('アー・ユー・ペイイング・アテンション', 'ファミリー')
('アー・ユー・ペイイング・アテンション', 'ファミリー')
('アー・ユー・ペイイング・アテンション', 'ファミリー')
('アー・ユー・マイ・マザー?', 'ファミリー')
('アー・ユー・マイ・マザー?', 'ファミリー')
('アー・ユー・マイ・マザー?', 'ファミリー')
('アー・ユー・マイ・マザー?', 'ファミリー')
%