望月の息抜き

在宅勤務の息抜きです。主にプログラミングについて書いていきたいと思います。

【Python】【11】データベースを作ってみよう

【記事の目標】

Pythonでデータベースを新規作成し、テーブルを作成してみよう。

 

【作業手順】

1.SQLiteをインポート

2.データベースを作成しよう

3.テーブルを作成しよう

4.コミットしてみよう

5.テーブルが作成出来ているか確認しよう

 

1.SQLiteをインポート

標準ライブラリのため、インストールの必要はありません。

以下のようにインポートしましょう。

 import sqlite3

これで、SQLiteが利用できるようになりました。

 

2.データベースを作成しよう

データベースを作成してみましょう。

 db_name = 'blog_test'
connect = sqlite3.connect(db_name)

blog_test というデータベースを作成します。

sqlite3.Cnnectionオブジェクトを変数connectに格納しています。

 

3.テーブルを作成しよう

以下のようなテーブルを作成します。

 テーブル名:first_table

 カラム1:id (primary key)

 カラム2:value

では実際に書いてみましょう。

 sql = 'CREATE TABLE IF NOT EXISTS first_table (id INTEGER PRIMARY KEY AUTOINCREMENT, value TEXT)'
cursor = connect.cursor()
cursor.execute(sql)

2行目は sqlite.Cursorオブジェクトを変数cursorに格納しています。

cursorのexecuteに実行したいSQLを渡しましょう。

 

4.コミットしてみよう

「2.」「3.」とコードを書いてきましたが、これを実行してもテーブルは作成されません。

実行を完了させるために、コミットを行いましょう。

 connect.commit()
connect.close()

これで、データベースを作成して、テーブルが作成されます。

f:id:fysker:20220115163718p:plain

main.py と同じ階層に blog_test というデータベースファイルが作成されています。

f:id:fysker:20220115165746p:plain

でも、本当にデータベースやテーブルが作成されたか、いまいちわかりませんね。

次のステップで作成できているか確認しましょう。

 

5.テーブルが作成出来ているか確認しよう

確認するために、先ほど記載していたコードは一度削除かコメントアウトしましょう。

まずは、インポートとデータベースの作成ですね。

 import sqlite3
 db_name = 'blog_test'
connect = sqlite3.connect(db_name)

さっき作っていたのにまた同じコードで大丈夫なの?

と思った方もいると思いますが、すでに存在しているデータベース名の場合は新しく作成されずに、存在しているデータベースにアクセスされます。

 

では、抽出用のSQLを書いていきましょう。

今回はテーブルが出来ているかを確認したいため、テーブルの一覧を取得するSQLを実行していきましょう。

 sql = 'SELECT * from sqlite_master WHERE TYPE="table"'
cursor = connect.cursor()
cursor.execute(sql)

これで、データベースにあるテーブルの一覧が取得できます。

本当に取得出来ているかを確認するためにコンソールに出力してみましょう。

 for row in cursor.fetchall():
print(row)

cursor.fetchall() で、実行したSELECT文の取得結果が全て取得できます。

最後にConnectionをcloseしましょう。

 connect.close()

実行すると以下のようにテーブル一覧が出力されます。

f:id:fysker:20220115164628p:plain

今回作成した、first_table が出来ていることが確認できました。

 

 

今回は、テーブルの作成まで実施しました。

初めて触れる方だと、SQL文が難しく感じてしまうと思います。

特にpythonと関係ないのでSQLについてはさらっと流していますが、別の記事でSQL文について触りだけでも説明しようかと考えています。

 

記事を書いていて、テーブルの作成だけで結構多いなと感じてしまったため、データの登録や参照については次回触れようと思います。