【Python】SQLite でデータ追加、更新、削除をする
おはようございます。
昨日に引き続き、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="検索"> <input type="button" value="追加"> </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="更新"> <input type="button" value="削除"> </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", "こなつ", "♀", "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"), )
起動してみる
検索ボタンをクリックします。
追加ボタンをクリックします。
行を選択して、更新ボタンをクリックします。
行を選択して、削除ボタンをクリックします。
まとめ
ひとまず固定ではあるものの追加、更新、削除までやってみました。
次回はまた別のことをやってみようかと思います。
ではでは。
ディスカッション
コメント一覧
追加ボタンをクリックしてもコンソールでエラーになります
addButtonClick の JSへの記述が見当たらないからでしょうか?
aaa様
いつもブログを見ていただきありがとうございます。
ご指摘の件、確認したところ確かにJSの記述が漏れているようですね。。
残念なお知らせなのですが、ソースが残っておりませんでした。。