計算機科学のブログ

ほしい物リスト

SQL - SQLite - ALTER文 - 過去の書き換え - 列の追加

Head First SQL ―頭とからだで覚えるSQLの基本Lynn Beighley(著)、 佐藤 直生(監訳)、 松永 多苗子(翻訳)、 オライリージャパンの 5章(ALTER文 - 過去の書き換え)、p.199(自分で考えてみよう)の解答を求めてみる。

sample1.sql

-- SQliteではprimary keyな列を追加できないみたい
-- autoincrementも。
-- あと本書のMySQLみたいな列の挿入箇所の指定もできないみたい
-- alter table my_contacts
-- add column contact_id integer autoincrement;

alter table my_contacts
add column phone text;

コード

sample1.py

#! /usr/bin/env python3

import sqlite3

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


def p():
    cur.execute('pragma table_info(my_contacts)')
    for row in cur.fetchall():
        print(row)


p()
with open('sample1.sql') as f:
    cur.executescript(f.read())

print('追加後')

p()

cur.close()
con.close()

入出力結果(Terminal, Zsh)

% ./sample1.py             
(0, 'last_name', 'TEXT', 0, None, 0)
(1, 'first_name', 'TEXT', 0, None, 0)
(2, 'gender', 'TEXT', 0, None, 0)
(3, 'email', 'TEXT', 0, None, 0)
(4, 'birthday', 'date', 0, None, 0)
(5, 'profession', 'TEXT', 0, None, 0)
(6, 'location', 'TEXT', 0, None, 0)
(7, 'status', 'TEXT', 0, None, 0)
(8, 'interests', 'TEXT', 0, None, 0)
(9, 'seeking', 'TEXT', 0, None, 0)
追加後
(0, 'last_name', 'TEXT', 0, None, 0)
(1, 'first_name', 'TEXT', 0, None, 0)
(2, 'gender', 'TEXT', 0, None, 0)
(3, 'email', 'TEXT', 0, None, 0)
(4, 'birthday', 'date', 0, None, 0)
(5, 'profession', 'TEXT', 0, None, 0)
(6, 'location', 'TEXT', 0, None, 0)
(7, 'status', 'TEXT', 0, None, 0)
(8, 'interests', 'TEXT', 0, None, 0)
(9, 'seeking', 'TEXT', 0, None, 0)
(10, 'phone', 'TEXT', 0, None, 0)
%