伺服器框架新增MySQL功能
阿新 • • 發佈:2018-12-13
資料匯入資料庫
source 檔案路徑/檔名
程式碼流程
index介面
整體框架在前面x文章中的伺服器框架中修改
匯入pymysql庫,連結資料庫,返回conn物件,用conn物件建立一個鉤子cs = conn.cursor(),用鉤子去execute資料庫查詢語句,stock_infos = cs.fetchall() fetch所有的查詢資料。關閉鉤子,關閉conn物件
conn = connect(host="localhost", port=3306, user="root", password="123456", database="stock_db", charset="utf8")
cs = conn.cursor()
cs.execute("select * from info;")
stock_infos = cs.fetchall()
cs.close()
conn.close()
資料庫讀取出來的資料每一項是一個元祖,我們要把元祖裡的每一項匹配到前段程式碼的對應格式裡去
這是前段程式碼的格式,把他存到tr_template變數中
tr_template="""<tr>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>
<input type="button" value="新增" id="toAdd" name="toAdd" systemidvalue="000007">
</td>
</tr>"""
把資料去一一匹配
html = ""
for line_info in stock_infos:
html += tr_template%(line_info[0],line_info[1],line_info[2],line_info[3],line_info[4],\
line_info[5],line_info[6],line_info[7])
最後是固定格式:
content = re.sub(r"\{%content%\}", html, content)
返回content。
center介面
首先center介面需要做的是資料庫的兩個表聯合查詢,只需要改動執行的sql語句還有對應的前段demo就可以
conn = connect(host="localhost", port=3306, user="root", password="123456", database="stock_db", charset="utf8")
cs = conn.cursor()
cs.execute("select i.code,i.short,i.chg,i.turnover,i.price,i.highs,f.note_info from info\
as i inner join focus as f on i.id=f.info_id;")
stock_infos = cs.fetchall()
cs.close()
conn.close()
tr_template = """<tr>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>
<a type="button" class="btn btn-default btn-xs" href="/update/300268.html"><span class=\
"glyphicon glyphicon-star" aria-gidden="ture"></span>修改</a>
</td>
<td>
<input type="button" value="刪除" id="toDel" name="toDel" systemidvalue="300268">
</td>
</tr>"""
# content = re.sub(r"\{%content%\}", str(stock_infos), content)
html = ""
for line_info in stock_infos:
html += tr_template % (line_info[0], line_info[1], line_info[2], line_info[3], line_info[4], \
line_info[5], line_info[6])
content = re.sub(r"\{%content%\}", html, content)
服務端框架完整程式碼
import re
from pymysql import connect
URL_FUNC_DICT = dict()
def route(url):
def set_func(func):
# URL_FUNC_DICT["/index.py"] = index
URL_FUNC_DICT[url] = func
# def call_func(*args, **kwargs):
# return func(*args, **kwargs)
# return call_func
return set_func
@route("/index.html") # 相當於 @set_func # index = set_func(index)
def index():
with open("./templates/index.html", encoding="utf-8") as f:
content = f.read()
conn = connect(host="localhost", port=3306, user="root", password="123456", database="stock_db", charset="utf8")
cs = conn.cursor()
cs.execute("select * from info;")
stock_infos = cs.fetchall()
cs.close()
conn.close()
tr_template="""<tr>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>
<input type="button" value="新增" id="toAdd" name="toAdd" systemidvalue="000007">
</td>
</tr>"""
# content = re.sub(r"\{%content%\}", str(stock_infos), content)
html = ""
for line_info in stock_infos:
html += tr_template%(line_info[0],line_info[1],line_info[2],line_info[3],line_info[4],\
line_info[5],line_info[6],line_info[7])
content = re.sub(r"\{%content%\}", html, content)
return content
@route("/center.html")
def center():
with open("./templates/center.html", encoding="utf-8") as f:
content = f.read()
#my_stock_info = "這裡是從mysql查詢出來的資料。。。"
conn = connect(host="localhost", port=3306, user="root", password="123456", database="stock_db", charset="utf8")
cs = conn.cursor()
cs.execute("select i.code,i.short,i.chg,i.turnover,i.price,i.highs,f.note_info from info\
as i inner join focus as f on i.id=f.info_id;")
stock_infos = cs.fetchall()
cs.close()
conn.close()
tr_template = """<tr>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>
<a type="button" class="btn btn-default btn-xs" href="/update/300268.html"><span class=\
"glyphicon glyphicon-star" aria-gidden="ture"></span>修改</a>
</td>
<td>
<input type="button" value="刪除" id="toDel" name="toDel" systemidvalue="300268">
</td>
</tr>"""
# content = re.sub(r"\{%content%\}", str(stock_infos), content)
html = ""
for line_info in stock_infos:
html += tr_template % (line_info[0], line_info[1], line_info[2], line_info[3], line_info[4], \
line_info[5], line_info[6])
content = re.sub(r"\{%content%\}", html, content)
return content
def application(env, start_response):
start_response('200 OK', [('Content-Type', 'text/html;charset=utf-8')])
file_name = env['PATH_INFO']
# file_name = "/index.py"
try:
# func = URL_FUNC_DICT[file_name]
# return func()
return URL_FUNC_DICT[file_name]()
except Exception as ret:
return "產生了異常:%s" % str(ret)
效果
author:[email protected]
git:https://github.com/zhangyuespec/mini_web
可以直接拉取專案:
git clone https://github.com/zhangyuespec/mini_web.git