2014年8月9日土曜日

開発環境

Head First SQL ―頭とからだで覚えるSQLの基本 (Lynn Beighley(著)、 佐藤 直生 (監訳)、 松永 多苗子 (翻訳)、オライリージャパン)の4章(賢いテーブル設計: 正規化の理由)、エクササイズ(p.189)を解いてみる。

エクササイズ(p.189)

4.

idfirst_namelast_name
1ジャンブレイディ
2ボビーブレイディ
3シンディブレイディ
99ピーターブレイディ

コード(BBEdit, Emacs)

sample189.py

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

import sqlite3

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

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

def p_all(table):
    cursor.execute("""SELECT * FROM {0}""".format(table))
    print(tuple(map(lambda header: header[0], cursor.description)))
    p(table)

cursor.execute("""
CREATE TABLE names(
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
first_name VARCHAR(50),
last_name VARCHAR(50))
""")

# 1つ目のINSERT文はidがNULLなので動作しない
cursor.execute("""
INSERT INTO names (id, first_name, last_name)
VALUES (1, 'ジャン', 'ブレイディ')
""")

cursor.execute("""
INSERT INTO names
VALUES (2, 'ボビー', 'ブレイディ')
""")

cursor.execute("""
INSERT INTO names (first_name, last_name)
VALUES ('シンディ', 'ブレイディ')
""")

cursor.execute("""
INSERT INTO names (id, first_name, last_name)
VALUES (99, 'ピーター', 'ブレイディ')
""")

connection.commit()

p_all('names')

connection.close()

入出力結果(Terminal, IPython)

$ ./sample189.py
('id', 'first_name', 'last_name')
names
(1, 'ジャン', 'ブレイディ')
(2, 'ボビー', 'ブレイディ')
(3, 'シンディ', 'ブレイディ')
(99, 'ピーター', 'ブレイディ')
$

0 コメント:

コメントを投稿