2014年7月23日水曜日

開発環境

Head First SQL ―頭とからだで覚えるSQLの基本 (Lynn Beighley(著)、 佐藤 直生 (監訳)、 松永 多苗子 (翻訳)、オライリージャパン)の2章(SELECT 文: 天賦のデータ検索)、自分で考えてみよう(p.89)を解いてみる。

自分で考えてみよう(p.89)

コード(BBEdit, Emacs)

sample89.py

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

import sqlite3

connection = sqlite3.connect('drinks.sqlite')
cursor = connection.cursor()

def p(msg):
    print(msg)
    for row in cursor.fetchall():
        print(row)

cursor.execute("""
CREATE TABLE drink_info(
drink_name VARCHAR(20),
cost DEC,
carbs DEC,
color VARCHAR(5),
ice CHAR(1),
calories INT)
""")

for info in [('ブラックソーン', 3, 8.4, '黄', 'Y', 33),
             ('ブルームーン', 2.5, 3.2, '青', 'Y', 12),
             ('オーマイゴッシュ', 3.5, 8.6, '橙', 'Y', 35),
             ('ライムフィズ', 2.5, 5.4, '緑', 'Y', 24),
             ('キスオンザリップス', 5.5, 42.5, '紫', 'Y', 171),
             ('ホットゴールド', 3.2, 32.1, '橙', 'N', 135),
             ('ローンツリー', 3.6, 4.2, '赤', 'Y', 17),
             ('グレイハウンド', 4, 14, '黄', 'Y', 50),
             ('インディアンサマー', 2.8, 7.2, '茶', 'N', 30),
             ('ブルフロッグ', 2.6, 21.5, '黄褐色', 'Y', 80),
             ('ソーダアンドイット', 3.8, 4.7, '赤', 'N', 19)]:
    cursor.execute("""
    INSERT INTO drink_info VALUES(
    '{0}', {1}, {2}, '{3}', '{4}', {5})
    """.format(*info))

connection.commit()

cursor.execute("""SELECT * FROM drink_info""")
print(tuple(map(lambda header: header[0], cursor.description)))
p('全て')

cursor.execute("""
SELECT cost FROM drink_info
WHERE ice = 'Y' AND
color = '黄' AND
calories > 33
""")
p('1')

cursor.execute("""
SELECT drink_name, color FROM drink_info
WHERE carbs <= 5 AND
ice = 'Y'
""")
p('2')

cursor.execute("""
SELECT cost FROM drink_info
WHERE calories > 80
""")
p('3')

cursor.execute("""
SELECT color, ice FROM drink_info
WHERE drink_name = 'グレイハウンド' OR
drink_name = 'キスオンザリップス'
""")
p('4')

connection.close()

入出力結果(Terminal, IPython)

$ ./sample89.py 
('drink_name', 'cost', 'carbs', 'color', 'ice', 'calories')
全て
('ブラックソーン', 3, 8.4, '黄', 'Y', 33)
('ブルームーン', 2.5, 3.2, '青', 'Y', 12)
('オーマイゴッシュ', 3.5, 8.6, '橙', 'Y', 35)
('ライムフィズ', 2.5, 5.4, '緑', 'Y', 24)
('キスオンザリップス', 5.5, 42.5, '紫', 'Y', 171)
('ホットゴールド', 3.2, 32.1, '橙', 'N', 135)
('ローンツリー', 3.6, 4.2, '赤', 'Y', 17)
('グレイハウンド', 4, 14, '黄', 'Y', 50)
('インディアンサマー', 2.8, 7.2, '茶', 'N', 30)
('ブルフロッグ', 2.6, 21.5, '黄褐色', 'Y', 80)
('ソーダアンドイット', 3.8, 4.7, '赤', 'N', 19)
1
(4,)
2
('ブルームーン', '青')
('ローンツリー', '赤')
3
(5.5,)
(3.2,)
4
('紫', 'Y')
('黄', 'Y')
$

0 コメント:

コメントを投稿