BETA

【Python】SQLite でデータ追加、更新、削除をする

投稿日:2018-12-04
最終更新:2018-12-04
※この記事は外部サイト(https://www.doraxdora.com/blog/2018/03/09/...)からのクロス投稿です

おはようございます。

昨日に引き続き、PythonでSQLiteです。 今回は追加、更新、削除をやってみます。

プログラムは前回のものを流用します。

【Python】SQLiteからデータを取得して表示する(その2)

画面の修正

追加、更新、削除ボタンを設置

index.html

<!DOCTYPE html>
<html>
  <head>
    <title>{{ title }}</title>
    <link rel="stylesheet" href="{{ static_url('css/style.css') }}"/>
    <script type="text/javascript" src="{{ static_url('js/script.js') }}"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
  </head>
  <body>
    <div id="container">
      <div style="float:left">
        <span>
          名前:
        </span>
        <input type="text" id="searchName" value="">
        <span>
          種別:
        </span>
        <select id="searchKind">
            <option value="">指定なし</option>
          {% for item in items %}
            <option value="{{item[0]}}">{{ item[1] }}</option>
          {% end %}
        </select>
      </div>
      <div style="float:right;">
        <input type="button" value="検索" onclick="searchButtonClick()">
        <input type="button" value="追加" onclick="addButtonClick()">
      </div>
      <div style="clear:both; padding-top:10px;">
        <table id="catTable">
          <tr id="header">
            <th style="width:10%">No</th>
            <th style="width:20%">名前</th>
            <th style="width:10%">性別</th>
            <th style="width:10%">年齢</th>
            <th style="width:20%">種別</th>
            <th style="width:30%">好物</th>
          </tr>
        </table>
      </div>
      <div id="buttonArea" class="hidden" style="float:left;">
        <input type="button" value="更新" onclick="modButtonClick()">
        <input type="button" value="削除" onclick="delButtonClick()">
      </div>
    </div>
  </body>
</html>

マウスオーバーで行をハイライト、クリックで背景色変更するように修正
style.css
body {
  font-family:"MS Pゴシック","MS PGothic",sans-serif;
  width: 100%;
  margin: 0 auto;
}
div {
  margin:20px;
}
div span {
  margin:15px;
}
div#container{
    width: 800px;
}
table {
    width:100%;
   border: 1px solid #ccc;
   border-collapse:collapse;
}
div.hidden {
   display: none;
   visibility:hidden;
}
th {
   text-align:center;
   background-color:#404040;
   color:#ffffff;
   width: 100px;
   height: 20px;
   border: 1px solid #ccc;
}
td {
   padding-left:5px;
   width: 200px;
   height: 20px;
   border: 1px solid #ccc;
}
input[type="button"] {
    width: 100px;
}
tr.hover {
    background-color: #e5eaf5;
}
tr.selected {
    background-color: #aec7e1;
}

プログラムの修正

server.py

データ追加、削除、更新処理を追加 ※とりあえずデータは固定です

SQLiteUtil

@staticmethod
def insert_data(cat):
    u""" 渡されたタプルデータを登録します """

logging.info("insert data")
with closing(sqlite3.connect("sample.db")) as conn:

    c = conn.cursor()
    # 猫データ
    sql = "INSERT INTO TBLCAT VALUES (?,?,?,?,?,?)"
    c.execute(sql, cat)

    c.close()
    conn.commit()

@staticmethod def update_data(cat): u""" 渡されたタプルデータを更新します """

logging.info("insert data")
with closing(sqlite3.connect("sample.db")) as conn:

    c = conn.cursor()
    # 猫データ
    sql = "UPDATE TBLCAT SET"
    sql += " NAME = ?"
    sql += ", SEX = ?"
    sql += ", AGE = ?"
    sql += ", KIND_CD = ?"
    sql += ", FAVORITE = ?"
    sql += " WHERE NO = ?"
    c.execute(sql, cat)

    c.close()
    conn.commit()

@staticmethod def delete_data(cat): u""" 渡されたタプルデータを更新します """

logging.info("insert data")
with closing(sqlite3.connect("sample.db")) as conn:

    c = conn.cursor()
    sql = "DELETE FROM TBLCAT WHERE NO = ?"
    c.execute(sql, cat['no'])

    c.close()
    conn.commit()

リクエストハンドラー

class AddCatHandler(tornado.websocket.WebSocketHandler):
    u""" データ追加処理 """

def get(self):

    logging.info("AddCatHandler[GET]")

def post(self):

    logging.info("AddCatHandler[POST]")
    cat = ("5", "こなつ", "&#x2640;", "7", "01", "布団")

    su = SQLiteUtil()
    su.insert_data(cat)
    param = json.loads(self.request.body)
    result = su.select_cat(param['name'], param['kind_cd'])

    self.write(json.dumps(result, ensure_ascii=False))

class ModCatHandler(tornado.websocket.WebSocketHandler): u""" データ追加処理 """

def get(self):

    logging.info("ModCatHandler[GET]")

def post(self):

    logging.info("ModCatHandler[POST]")
    param = json.loads(self.request.body)
    logging.info(param)

    su = SQLiteUtil()

    # 更新
    cat = (param[1]['name'], param[1]['sex'], param[1]['age'], "03", param[1]['favorite'], param[1]['no'])
    logging.info(cat)
    su.update_data(cat)

    result = su.select_cat(param[0]['name'], param[0]['kind_cd'])

    self.write(json.dumps(result, ensure_ascii=False))

class DelCatHandler(tornado.websocket.WebSocketHandler): u""" データ削除処理 """

def get(self):

    logging.info("DelCatHandler[GET]")

def post(self):

    logging.info("DelCatHandler[POST]")
    param = json.loads(self.request.body)
    logging.info(param)

    su = SQLiteUtil()

    # 更新
    su.delete_data(param[1])

    result = su.select_cat(param[0]['name'], param[0]['kind_cd'])

    self.write(json.dumps(result, ensure_ascii=False))

アプリケーションの宣言を変更

application = tornado.web.Application([
    (r"/", MainHandler),
    (r"/search", SearchCatHandler),
    (r"/add", AddCatHandler),
    (r"/mod", ModCatHandler),
    (r"/del", DelCatHandler),
    ],
    template_path=os.path.join(os.getcwd(),  "templates"),
    static_path=os.path.join(os.getcwd(),  "static"),
    js_path=os.path.join(os.getcwd(), "js"),
)

起動してみる

検索ボタンをクリックします。

追加ボタンをクリックします。

行を選択して、更新ボタンをクリックします。

行を選択して、削除ボタンをクリックします。

まとめ

ひとまず固定ではあるものの追加、更新、削除までやってみました。

次回はまた別のことをやってみようかと思います。

ではでは。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@doraxdoraの技術ブログ 主に Java, C#, Python, Javascript の記事を載せていく予定。

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!