【Tornado】使用tornado寫API的增刪改查(一)

安裝

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章