sqlite3でカラム削除は可能でしょうか?
また、可能であればどのように行うのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
stack overflowもご参照ください。
sqlite3ではカラムを削除するコマンドはないようです。なので以下のようにやるのが普通のようですね。
- 元のテーブル(削除対象のカラムが入っている)を用意する
- 元のテーブルのコピーを削除対象のカラムを除いて作成する
- 古いテーブルを削除する
- コピーしたテーブルの名前を元のテーブルのものにする
pythonで実装してみました。
python
1import sqlite3 2from contextlib import closing 3 4DBNAME = 'sample.db' 5 6with closing(sqlite3.connect(DBNAME)) as conn: 7 c = conn.cursor() 8 9 10 def print_table(): 11 print("=============") 12 select_stmt = '''SELECT * FROM FAMILY''' 13 for r in c.execute(select_stmt): 14 print(r) 15 print("=============") 16 17 18 # オリジナルのテーブルを作成 19 create_stmt = '''CREATE TABLE FAMILY (id INTEGER, name TEXT, age INTEGER, gender TEXT)''' 20 c.execute(create_stmt) 21 22 # メンバーを追加 23 add_member_stmt = '''INSERT INTO FAMILY (id, name, age, gender) values (?,?,?,?)''' 24 users = [(1, 'TARO', 39, 'M'), (2, 'KYOKO', 32, 'F'), (3, 'YUTA', 12, 'M'), (4, 'HANAKO', 8, 'F')] 25 c.executemany(add_member_stmt, users) 26 27 conn.commit() 28 29 # オリジナルのテーブルを表示 30 print("ORIGINAL TABLE") 31 print_table() 32 33 # id, name, ageのみコピーしたtableを作成 34 copy_table_without_gender_stmt = '''CREATE TABLE FAMILY_COPY AS SELECT id, name, age FROM FAMILY''' 35 c.execute(copy_table_without_gender_stmt) 36 37 # オリジナルのテーブルを削除 38 drop_stmt = '''DROP TABLE FAMILY''' 39 c.execute(drop_stmt) 40 41 # コピーしたテーブル名(FAMILY_COPY)をオリジナルのテーブル名(FAMILY)に変更 42 rename_stmt = '''ALTER TABLE FAMILY_COPY RENAME TO FAMILY''' 43 c.execute(rename_stmt) 44 45 conn.commit() 46 47 # genderのカラムを削除したテーブルを表示 48 print("DELETED GENDER") 49 print_table() 50 51 # 後処理 52 c.execute(drop_stmt)
>>> ORIGINAL TABLE ============= (1, 'TARO', 39, 'M') (2, 'KYOKO', 32, 'F') (3, 'YUTA', 12, 'M') (4, 'HANAKO', 8, 'F') ============= DELETED GENDER ============= (1, 'TARO', 39) (2, 'KYOKO', 32) (3, 'YUTA', 12) (4, 'HANAKO', 8) =============
投稿2018/04/05 18:46
総合スコア123
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/05 23:50