安裝
pip3 install tornado
項目結構
主函數
我這邊是把接口都放在主函數了,大家可以自行拆開,數據庫連接用的是pymysql
爲了方便處理,這裏從mysql中取值採用字典格式,遊標需要這麼寫
cursor = db.cursor(pymysql.cursors.DictCursor)
默認的情況是元組格式,不會攜帶字段名
cursor = db.cursor()
main.py
# -*- coding:utf-8 -*-
import tornado.web
import tornado.ioloop
from tornado.options import options, define
import os
import pymysql
import json
mysqldb = pymysql.Connection(host='127.0.0.1', database='MyBlog', user='root', password='xxxxx', charset='utf8')
import datetime
class DateEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime.datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(obj, datetime.date):
return obj.strftime("%Y-%m-%d")
else:
return json.JSONEncoder.default(self, obj)
# 定義處理類型
class IndexHandler(tornado.web.RequestHandler):
# 添加一個處理get請求方式的方法
def get(self):
# 向響應中,添加數據
self.write('你都如何回憶我,帶着笑或是很沉默')
class HelloTornado(tornado.web.RequestHandler):
def get(self):
self.render("HelloTornado.html")
class GetALlBlog(tornado.web.RequestHandler):
def initialize(self, db):
self.db = db
print("db is ok")
def get(self):
db = self.db
cursor = db.cursor(pymysql.cursors.DictCursor)
try:
cursor.execute(
"SELECT A.id, A.title, A.`timestamp`, A.views, A.greats, A.comments,U.name as 'authorname' FROM blog_articles A, blog_bloguser U WHERE A.authorname_id = U.id AND A.STATUS = '有效'LIMIT 10"
)
# [{},{},...,{}]字典形式
result = cursor.fetchall()
return_data = {}
return_data["code"] = 200
return_data["message"] = "success"
return_data["data"] = result
self.finish(json.dumps(return_data, cls=DateEncoder))
except Exception as e:
return self.write(e)
db.commit()
print("success")
cursor.close()
settings = dict(
template_path=os.path.join(os.path.dirname(__file__), "templates"),
static_path=os.path.join(os.path.dirname(__file__), "statics"),
debug=True,
)
if __name__ == '__main__':
# 創建一個應用對象
define("port", default=8088, type=int, help="run server on the given port.")
handlers = [
(r'/', IndexHandler),
(r'/index', HelloTornado),
(r'/api/getallblog', GetALlBlog, dict(db=mysqldb)),
]
app = tornado.web.Application(
handlers,
**settings
)
# 綁定一個監聽端口
app.listen(8088)
# 啓動web程序,開始監聽端口的連接
tornado.ioloop.IOLoop.current().start()
SQL外鍵查詢
如果A表外鍵關聯了B
SELECT
A.id,
A.title,
A.timestamp,
A.views,
A.greats,
A.comments,
B.name as "authorname"
FROM
blog_articles A,
blog_bloguser B
WHERE
A.authorname_id = B.id
AND A.STATUS = "有效"
LIMIT 10
這裏B.name as "authorname"是對字段重命名,字段在B中原來是name