LoginSignup
2
3

More than 3 years have passed since last update.

【初心者向け】pythonで入力されたデータをデータベースに反映する方法

Posted at

未来電子テクノロジーでインターンをしている山田です。

Pythonについて学習のアウトプットとして投稿します。

プログラミング初心者であるため、内容に誤りがあるかもしれません。
もし、誤りがあれば修正するのでどんどん指摘してください。

データベースに関して苦しんだ点

既にプログラミング学習を始めてしばらく経った方やプログラミングを業務として行なっている方にとっては、今や当然のこととして、忘れてしまった感覚があると思います。

そこで、データベースとの連携に苦しんだ点を初心者としての目線でお伝えできればなと思います。

私は今でこそ、データベースの基本について理解したつもりですが、最初は「データがどのように存在しているか」といった概念を理解するのに非常に苦しみました。

そのため、「POSTで送る」といった言葉や「テーブルに追加する」という言葉が分かっているようで、きちんと理解できていませんでした。

そこで今回は、初心者が苦しむ「データがどのように存在しているのか」といった点に重きを置きながらpythonで入力されたデータをデータベースに反映する方法について紹介していきます。

入力フォームで入力されたデータを次のページに送る方法

例えば、年齢や身長を入力するフォームを作って、次のページにデータを送る場合、コードは以下のようになります。

input.py
# 以下のコードを書かないと、htmlとして読み込んでもらえない。
print("Content-type: text/html; charset=utf-8")

print(

"""
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>入力フォーム</title>
</head>

<body>

    <form name="form" method="post" action="confirm.py">
      年齢:<br>
        <input name="age"><br>
      身長:<br>
        <input name="height"><br>

<input type="submit" value="送信">

</form>
</body>
</html>
"""
)

このコードから言えることとしては、このような入力フォームの「年齢:」の後ろに入力された数字(年齢)は、「age」という変数として(身長も同様)、「post」という形式で、「confirm.py」という指定されたページに送られます。
そのため、操作画面で「送信」ボタンを押すと、「input.py」から「confirm.py」に移り、「age」というデータも移ります。

前のページから送られたデータをデータベースに反映する方法

データをいつでも自由に取り出したり暑かったりするためには、データベースに反映する必要があります。
今回は、SQlite3を使った方法を紹介します。
データベースに反映するための大きな流れとしては以下のようになります。
1.データベースファイルを作る
2.テーブル(データを入れる箱のようなもの)を作成する
3.前のページから送られてきたデータを取得して変数にセット
4.テーブルにデータを挿入する

これをコードで表すと以下のようになります。

confirm.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import cgi
import sys
import io
import sqlite3

#データベースファイルの作成
conn = sqlite3.connect('sample.db')

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

#テーブルを作成し、データの挿入ができるように値を取得して変数にセット。
curs.execute("CREATE TABLE if not exists data(id INTEGER PRIMARY KEY AUTOINCREMENT, age, height)");
form = cgi.FieldStorage()
age = form.getfirst('age')
height=form.getfirst('height')

# データの挿入
c.execute('INSERT INTO id(nennrei,shintyo) VALUES(?,?)',[age, height])

# 挿入した結果を保存(コミット)する
conn.commit()

# データベースへのアクセスが終わったら close する
conn.close()

今回は、初心者が陥りがちなそもそもデータという概念を理解する難しさを踏まえた上でご紹介しました。

私自身も初心者には変わりないので、間違いがありましたら、ぜひご指摘ください。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3