【Python】SQLite でデータ追加、更新、削除をする
おはようございます。
昨日に引き続き、PythonでSQLiteです。
今回は追加、更新、削除をやってみます。
プログラムは前回のものを流用します。
【Python】SQLiteからデータを取得して表示する(その2)
スポンサーリンク
画面の修正
追加、更新、削除ボタンを設置
index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <!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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | body { font-family:"MS Pゴシック","MSPGothic",sans-serif; width:100%; margin:0auto; } div { margin:20px; } div span { margin:15px; } div#container{ width:800px; } table { width:100%; border:1pxsolid#ccc; border-collapse:collapse; } div.hidden { display:none; visibility:hidden; } th { text-align:center; background-color:#404040; color:#ffffff; width:100px; height:20px; border:1pxsolid#ccc; } td { padding-left:5px; width:200px; height:20px; border:1pxsolid#ccc; } input[type="button"] { width:100px; } tr.hover { background-color:#e5eaf5; } tr.selected { background-color:#aec7e1; } |
プログラムの修正
server.py
データ追加、削除、更新処理を追加
※とりあえずデータは固定です
SQLiteUtil
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | @staticmethod definsert_data(cat): u""" 渡されたタプルデータを登録します """ logging.info("insert data") withclosing(sqlite3.connect("sample.db"))asconn: c=conn.cursor() # 猫データ sql="INSERT INTO TBLCAT VALUES (?,?,?,?,?,?)" c.execute(sql,cat) c.close() conn.commit() @staticmethod defupdate_data(cat): u""" 渡されたタプルデータを更新します """ logging.info("insert data") withclosing(sqlite3.connect("sample.db"))asconn: 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 defdelete_data(cat): u""" 渡されたタプルデータを更新します """ logging.info("insert data") withclosing(sqlite3.connect("sample.db"))asconn: c=conn.cursor() sql="DELETE FROM TBLCAT WHERE NO = ?" c.execute(sql,cat['no']) c.close() conn.commit() |
リクエストハンドラー
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | classAddCatHandler(tornado.websocket.WebSocketHandler): u""" データ追加処理 """ defget(self): logging.info("AddCatHandler[GET]") defpost(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)) classModCatHandler(tornado.websocket.WebSocketHandler): u""" データ追加処理 """ defget(self): logging.info("ModCatHandler[GET]") defpost(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)) classDelCatHandler(tornado.websocket.WebSocketHandler): u""" データ削除処理 """ defget(self): logging.info("DelCatHandler[GET]") defpost(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)) |
アプリケーションの宣言を変更
1 2 3 4 5 6 7 8 9 10 11 | 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の記述が漏れているようですね。。
残念なお知らせなのですが、ソースが残っておりませんでした。。