計算機科学のブログ

SQL - SQLite - Python - 複数テーブルのデータベース設計 - 現行テーブルからの脱却 - select, like

Head First SQL ―頭とからだで覚えるSQLの基本Lynn Beighley(著)、 佐藤 直生(監訳)、 松永 多苗子(翻訳)、 オライリージャパンの 7章(複数テーブルのデータベース設計 - 現行テーブルからの脱却)、p.283(自分で考えてみよう)の解答を求めてみる。

schema1.sql

select * from my_contacts
where gender = '女性'
and status = '独身'
and state = 'テキサス州'
and seeking like '%独身男性%'
and birthday > '1970-08-28'
and birthday < '1980-08-28'
and interests like '%動物%'
and interests like '%乗馬%'
and interests like '%映画%';

コード

sample1.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, 'my_contacts')


with open(f'schema1.sql') as f:
    cur.execute(f.read())
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)

% ./sample1.py
['email', 'birthday', 'first_name', 'last_name', 'interests', 'seeking', 'status', 'profession', 'location', 'gender', 'tel', 'city', 'state']
('jill_anderson@breaknechpizza.com', '1980-09-05', 'ジリアン', 'アンダーソン', 'カヤック乗り、爬虫類', '恋人、友達', '独身', 'テクニカルライター', 'カリフォルニア州パロアルト', 'F', None, None, None)
['email', 'birthday', 'first_name', 'last_name', 'interests', 'seeking', 'status', 'profession', 'location', 'gender', 'tel', 'city', 'state']
%