質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Q&A

解決済

1回答

3907閲覧

sqlite3カラム削除

Gh-_.

総合スコア9

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

0グッド

1クリップ

投稿2018/04/05 15:58

sqlite3でカラム削除は可能でしょうか?
また、可能であればどのように行うのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

shogiOtakku

総合スコア123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Gh-_.

2018/04/05 23:50

詳しいコードまでありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問