【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の記述が漏れているようですね。。
残念なお知らせなのですが、ソースが残っておりませんでした。。