天天看點

Tornado實戰之建立遷移資料庫

先看整體的目錄結構:

Tornado實戰之建立遷移資料庫

1、建立static\template\util\app幾個檔案夾。

2、新增manage.py檔案,内容如下:

# coding:utf-8
import os
import tornado.web
from tornado import ioloop
from tornado.options import define, options, parse_command_line
from app.views import IndexHandler, XindexHandler, DbHandler, DropHandler, AddStuHandler, StusHandler
from utils.Auth import *

define('port', default=8088, type=int)


class Application(tornado.web.Application):
    # 2.定義路由
    def __init__(self):
        handlers = [
            (r'/', IndexHandler),
            (r'/init_db/', DbHandler),   # 初始化資料庫
            (r'/drop_db/', DropHandler), # 删除資料庫
        ]
        settings = dict(
            debug=True,  # 調試模式,修改後自動重新開機服務,不需要自動重新開機,生産情況下切勿開啟,安全性
            template_path='templates',  # 模闆檔案目錄,想要Tornado能夠正确的找到html檔案,需要在 Application 中指定檔案的位置
            static_path='static',  # 靜态檔案目錄,可用于用于通路js,css,圖檔之類的添加此配置之後,tornado就能自己找到靜态檔案
            login_url='/login',  # 沒有登入則跳轉至此
            cookie_secret='1q2w3e4r',  # 加密cookie的字元串
            pycket={  # 固定寫法packet,用于儲存使用者登入資訊
                'engine': 'redis',
                'storage': {
                    'host': 'localhost',
                    'port': 6379,
                    'db_sessions': 5,
                    'db_notifications': 11,
                    'max_connections': 2 ** 33,
                },
                'cookie': {
                    'expires_days': 38,
                    'max_age': 100
                }
            }
        )

        super(Application, self).__init__(handlers,
                                          **settings)
        # 用super方法将父類的init方法重新執行一遍,然後将handlers和settings傳進去,完成初始化


if __name__ == '__main__':
    # 解析指令行
    parse_command_line()
    # 生産application對象
    app = Application()
    app.listen(options.port)
    tornado.ioloop.IOLoop.current().start()
           

3、新增conn.py,這個檔案主要是連接配接資料庫的配置,注意資料庫的庫名得提前建立。

# coding:utf-8
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

HOSTNAME = '10.149.42.81'
PORT = '3306'  # 注意這個不是本地端口是指遠端資料庫端口,因為pycharm已經先SSH連接配接到本地了
DATABASE = 'tornado'
USERNAME = 'root'
PASSWORD = '1230.0'

db_url = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(
    USERNAME,
    PASSWORD,
    HOSTNAME,
    PORT,
    DATABASE
)

# 連接配接資料庫
engine = create_engine(db_url)

Base = declarative_base(bind=engine)  # 這個基類是維系類和資料表關系的目錄。

# 在對表資料進行增删改查之前,先需要建立會話,建立會話之後才能進行操作,就類似于檔案要打開之後才能對檔案内容操作。
Session = sessionmaker(engine)
session = Session()
           

4、建立model.py,内容如下:

#coding:utf-8
from sqlalchemy import Column, Integer, String
from utils.conn import Base
# 映射模型對應的表
def create_db():
    Base.metadata.create_all()


# 删除模型映射的表
def drop_db():
    Base.metadata.drop_all()


# 定義模型 Student
# Base必須繼承,關聯資料庫和Student
class User(Base):
    # 主鍵自增的int類型的id主鍵
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(10), unique=True, nullable=False)
    pwd = Column(String(128), nullable=False)
    email = Column(String(25), unique=True, nullable=False)

    __tablename__ = 'user'
           

5、運作項目,python manage.py,浏覽器輸入http://127.0.0.1:8088/init_db生成資料庫表,删除同理。

6、至此資料庫遷移完成,建議使用navcat工具或者pycharm連接配接資料庫檢視資料表是否生成。