初心者でもPythonを使ってみよう

趣味と実益を兼ねたPython学習記



【sqlite3】テーブルを操作する方法【python】

f:id:vigilantPotato:20191130230817p:plain

sqlite3でデータベースに作成したテーブルについて、テーブル名の取得、編集、削除する方法をまとめました。

【スポンサーリンク】

テーブルを操作

データベース中のテーブルを操作するための様々なコマンドについて使い方をまとめました。

事前にsqlite3のインポートと、データベースfruit.dbを作成しておきます。

import sqlite3

#データベースを作成
db = sqlite3.connect("fruit.db", isolation_level=None)

テーブルの存在を確認し無ければ作成する

CREATE TABLEコマンドでテーブルを作成する際、すでに同名のテーブルが存在するとエラーが帰ってきてしまいますが、CREATE TABLEコマンドの後にIF NOT EXISTSを挿入することでエラーを回避することができます。

IF NOT EXISTSを挿入すると、事前に同名のテーブルがあるか確認し、重複がない場合のみにテーブルを作成してくれます。

以下のSQL命令文は、Fruitテーブルの存在を確認し、存在しない場合のみテーブルが新規生成されます。

#SQL命令文(Fruitテーブルが存在しなければテーブルを作成)
sql = """
    CREATE TABLE IF NOT EXISTS Fruit (
        id INTEGER PRIMARY KEY,
        name VARCHAR(20),
        price INTEGER
    );
"""

#命令を実行
db.execute(sql)

[↑ 目次へ]


データベース中のテーブル名を取得する

テータベース中に存在する全てのテーブル名を取得するコマンドが存在します。

テーブル名は、データベース中に自動的に生成されるsqlite_masterテーブル内に保管されており、SELECTコマンドで取得することができます。

sqlite_masterテーブルからデータベース中のテーブル名を取得するSQL命令文は以下の通りです。

sql = """SELECT name FROM sqlite_master WHERE TYPE='table'"""

このSQL命令文をカーソルオブジェクトで実行することで、テーブル名の一覧を取得できます。

#SQL命令文(データベース中のテーブル名を取得する)
sql = """SELECT name FROM sqlite_master WHERE TYPE='table'"""

#カーソルオブジェクトを作成
c = db.cursor()

#命令を実行してテーブル名を取得
for t in c.execute(sql):
    print(t)

[↑ 目次へ]


テーブル名を変更する

以下のsql命令文を実行することで、テーブル名を変更することができます。

ALTER TABLE 変更前のテーブル名 RENAME TO 変更後のテーブル名

テーブル名をFruitからKudamonoに変更する場合は以下の通りになります。

#SQL命令文(FruitテーブルにをKudamonoテーブルに名前を変更)
sql = """ALTER TABLE Fruit RENAME TO Kudamono"""

#命令を実行
db.execute(sql)

[↑ 目次へ]


テーブルを削除する

以下のsql命令文を実行することで、テーブル削除することができます。

DROP TABLE テーブル名

先ほど作成したKudamonoテーブルを削除する場合は、以下の通りになります。

#SQL命令文(Kudamonoテーブルを削除)
sql = """DROP TABLE Kudamono"""

#命令を実行
db.execute(sql)

[↑ 目次へ]


コード全体

import sqlite3

#データベースを作成
db = sqlite3.connect("fruit.db", isolation_level=None)

#①テーブルの存在を確認し、無ければ作成
#SQL命令文(Fruitテーブルが存在しなければテーブルを作成)
sql = """
    CREATE TABLE IF NOT EXISTS Fruit (
        id INTEGER PRIMARY KEY,
        name VARCHAR(20),
        price INTEGER
    );
"""

#命令を実行
db.execute(sql)


#②データベース中のテーブル名を取得する
def get_table_name():
    #SQL命令文
    sql = """SELECT name FROM sqlite_master WHERE TYPE='table'"""

    #カーソルオブジェクトを作成
    c = db.cursor()

    #命令を実行してテーブル名を取得
    for t in c.execute(sql):
        print(t)


print("テーブル名を表示")
get_table_name()

#③テーブル名を変更する
#SQL命令文(FruitテーブルにをKudamonoテーブルに名前を変更)
sql = """ALTER TABLE Fruit RENAME TO Kudamono"""

#命令を実行
db.execute(sql)

#テーブル名を表示
print("テーブル名をKudamonoに変更後")
get_table_name()


#⑤テーブルを削除する
#SQL命令文(Kudamonoテーブルを削除)
sql = """DROP TABLE Kudamono"""

#命令を実行
db.execute(sql)

#テーブル名を表示(テーブルが存在しないので空欄)
print("Kudamonoテーブル削除後")
get_table_name()

#データベースを閉じる
db.close()

[↑ 目次へ]