SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Pythonで学ぶバックエンド開発

【Pythonでデータベースを扱おう】Visual Studio Codeを使ったデータベース「SQLite3」を解説

Pythonで学ぶバックエンド開発 第4回

  • X ポスト
  • このエントリーをはてなブックマークに追加

PythonからプログラミングしてSQLite3を扱う

 第3回で解説したPythonでWebアプリを作る基本を元に、Pythonを使ってSQLite3を実行してデータベースを読み書きし、Webブラウザに文字列や取得したデータを表示します。

 まず「.htaccess」ファイルを用意します。同じディレクトリに「sql_insert_article.py」「sql_insert_comment.py」「sql_select_article.py」「sql_select_comment.py」をコーディングして実行します。macOSやLinuxでpyファイルをCGIとして実行するにはこれらのファイルにパーミッションで実行権限を与える必要があります。

ブラウザに表示したデータベースのデータ
ブラウザに表示したデータベースのデータ
「.htaccess」ファイル
AddHandler cgi-script .py
DirectoryIndex index.py

レコードを挿入する

 Pythonでデータベースを扱うにはデータファイルにコネクトし、CursorオブジェクトのカーソルでSQL文の文字列とその「?」に渡すデータを実行し、コネクトでコミットします。実際に使うデータであるレコード1行を「article」テーブルに挿入します。「datetime」モジュールは標準モジュールで日時を取得します。

サンプルコード「sql_insert_article.py」
#!C:\Users\ユーザー名\AppData\Local\Programs\Python\Python312\python.exe

import sys
import io
import sqlite3
import datetime

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

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

date = datetime.datetime.now()
sql = 'INSERT INTO article(title,speaker,date,sentence,xy) VALUES (?,?,?,?,?)'
data = ('一筆書きの「お絵描き掲示板」','たけし',date,'誰でも一筆書きできます。','400,200,400,200,200,500,200,500,600,500,600,500,400,200,400,200')
cur.execute(sql,data)
con.commit()

print('''Content-Type: text/html; charset=utf-8\n\n
      テーブルに1行追加しました
''')

cur.close()
con.close()

サンプルコードの解説

 シェバンの行はユーザー名をお使いのユーザー名に変更してください。またmacOSやLinuxでは「#!/usr/local/bin/python3.12」などになります。

 モジュールを読み込みます。

 文字コード「UTF-8」を適用します。

 「connect」関数でデータである'bezierbbs.db'を読み込んでコネクトし、カーソルを取得します。

 「datetime」関数の「now」メソッドで現在時間を取得します。

 カーソルでSQL文の「sql」変数と、SQL文に渡すデータ「data」変数を引数にしてSQL文を実行(「execute」関数)し、コミット(「commit」関数)します。

 Webブラウザに「テーブルに1行追加しました」を表示します。

 カーソルとコネクトを閉じます。

サンプルコード「sql_insert_comment.py」
#!C:\Users\ユーザー名\AppData\Local\Programs\Python\Python312\python.exe

import sys
import io
import sqlite3
import datetime

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

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

date = datetime.datetime.now()
sql = 'INSERT INTO comment(article_id,speaker,date,sentence) VALUES (?,?,?,?)' #
data = (1,'匿名',date,'誰でもアニメーションするワイヤーフレーム(針金の3Dオブジェクト)をWebブラウザ上でデザインすることができて、この「3Dお絵描き掲示板」で世界中の人に公開でき、コメントを書いたり書いてもらったりして交流することができます!')
cur.execute(sql,data)
con.commit()

print('''Content-Type: text/html; charset=utf-8\n\n
テーブルに1行追加しました
''')

cur.close()
con.close()

サンプルコードの解説

 シェバンの行はユーザー名をお使いのユーザー名に変更してください。またmacOSやLinuxでは「#!/usr/local/bin/python3.12」などになります。

 モジュールを読み込みます。

 文字コードUTF-8を適用します。

 connect関数でデータの'bezierbbs.db'を読み込んでコネクトし、カーソルを取得します。

 datetime関数のnowメソッドで現在時間を取得します。

 カーソルのSQL文のsql変数と、SQL文に渡すデータdata変数を引数にしてSQL文を実行(execute関数)し、コミット(commit関数)します。

 Webブラウザに「テーブルに1行追加しました」を表示します。

 カーソルとコネクトを閉じます。

レコードを取得する

 'bezierbbs.db'ファイルにコネクトしカーソルを取得してSQL文「SELECT」を実行してレコードの一覧を取得しますが、ここではコミットしません。コミットはデータベースの書き換えが必要な場合にだけ実行し、読み込みだけの場合はコミットしません。

サンプルコード「sql_select_article.py」
#!C:\Users\ユーザー名\AppData\Local\Programs\Python\Python312\python.exe

import sys
import io
import sqlite3

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

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

print('Content-Type: text/html; charset=utf-8\n\n')

sql = 'SELECT * FROM article'
for row in cur.execute(sql):
  print(row)

cur.close()
con.close()

サンプルコードの解説

 シェバンの行はユーザー名をお使いのユーザー名に変更してください。またmacOSやLinuxでは「#!/usr/local/bin/python3.12」などになります。

 モジュールを読み込みます。

 文字コードUTF-8を適用します。

 「connect」関数でデータの'bezierbbs.db'を読み込んでコネクトし、カーソルを取得します。

 SQL文のsql変数を引数にし、カーソルのSQL文を実行(execute関数)します。

 Webブラウザに取得した記事のリストを表示します。

 カーソルとコネクトを閉じます。

サンプルコード「sql_select_comment.py」
#!C:\Users\ユーザー名\AppData\Local\Programs\Python\Python312\python.exe

import sys
import io
import sqlite3

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

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

print('Content-Type: text/html; charset=utf-8\n\n')

sql = 'SELECT * FROM comment'
for row in cur.execute(sql):
  print(row)

cur.close()
con.close()

サンプルコードの解説

 シェバンの行はユーザー名をお使いのユーザー名に変更してください。またmacOSやLinuxでは「#!/usr/local/bin/python3.12」などになります。

 モジュールを読み込みます。

 文字コードUTF-8を適用します。

 「connect」関数でデータの'bezierbbs.db'を読み込んでコネクトし、カーソルを取得します。

 SQL文のsql変数を引数にし、カーソルのSQL文を実行(execute関数)します。

 Webブラウザに取得したコメントのリストを表示します。

 カーソルとコネクトを閉じます。

おわりに

 今回はVisual Studio Codeを使ってデータベースに読み書きして、それを応用してPythonをプログラミングしてデータベースを読み書きしました。

 次回はPythonでデータベースも利用して一筆書きBBSのアバウトページを表示する解説をします。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Pythonで学ぶバックエンド開発連載記事一覧

もっと読む

この記事の著者

大西 武(オオニシ タケシ)

 1975年香川県生まれ。大阪大学経済学部経営学科中退。プログラミング入門書などを30冊以上商業出版する作家。ドコモでグランプリなどコンテストに20回以上入賞するアーティスト。オリジナルの間違い探し「3Dクイズ」がTVで約10回出題。プロフィールサイト:https://profile.vixar.jp

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/21527 2025/08/08 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング