Flask-SQLAlchemy

  Flask-SQLAlchemy主要是把Flask和SQLAlchemy進行無縫對接python

settings.pymysql

#!/usr/bin/env python
# -*- coding:utf-8 -*-

class BaseConfig(object):
    # SESSION_TYPE = 'redis'  # session類型爲redis
    # SESSION_KEY_PREFIX = 'session:'  # 保存到session中的值的前綴
    # SESSION_PERMANENT = True  # 若是設置爲False,則關閉瀏覽器session就失效。
    # SESSION_USE_SIGNER = False  # 是否對發送到瀏覽器上 session:cookie值進行加密

    SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root@127.0.0.1:3306/s7day145_2?charset=utf8"
    SQLALCHEMY_POOL_SIZE = 5
    SQLALCHEMY_POOL_TIMEOUT = 30
    SQLALCHEMY_POOL_RECYCLE = -1

    # 追蹤對象的修改而且發送信號
    SQLALCHEMY_TRACK_MODIFICATIONS = False


class ProductionConfig(BaseConfig):
    pass


class DevelopmentConfig(BaseConfig):
    pass


class TestingConfig(BaseConfig):
    pass

 run.pyredis

from sansa import create_app

app = create_app()

if __name__ == '__main__':
    app.run()

 sansa __init__.pysql

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

from .models import *
from .views import account

def create_app():
    app = Flask(__name__)
    app.config.from_object('settings.DevelopmentConfig')

    # 將db註冊到app中
    db.init_app(app)

    # 註冊藍圖
    app.register_blueprint(account.account)
    return app

 views account.py數據庫

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from flask import Blueprint
from .. import db
from .. import models

account = Blueprint('account', __name__)


@account.route('/login')
def login():
    # 添加示例
    """
    db.session.add(models.Users(username='alex', pwd='123', gender=1))
    db.session.commit()

    obj = db.session.query(models.Users).filter(models.Users.id == 1).first()
    print(obj)

    PS: db.session和db.create_session
    """
    # db.session.add(models.Users(username='wupeiqi1', email='wupeiqi1@xx.com'))
    # db.session.commit()
    # db.session.close()
    #
    # db.session.add(models.Users(username='wupeiqi2', email='wupeiqi2@xx.com'))
    # db.session.commit()
    # db.session.close()
    # db.session.add(models.Users(username='alex1',email='alex1@live.com'))
    # db.session.commit()
    # db.session.close()



    user_list = db.session.query(models.Users).all()
    db.session.close()
    for item in user_list:
        print(item.username)


    return 'login'

   在上面代碼中db.init_app(app)主要是將db註冊到app中,在init_app函數源碼中,能看去讀取配置文件數據庫相關的配置flask

  那在建立表和操做表都要鏈接數據庫,首先看建立表,以前SQLAlchemy定義表須要繼承一個基類Base = declarative_base(),而在Flask-SQLAlchemy只要繼承db.Model,而後其餘的和SQLAlchemy是同樣的瀏覽器

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from . import db
from flask import Flask,request


class Users(db.Model):
    """
    用戶表
    """
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return '<User %r>' % self.username

   在Flask-SQLAlchemy導入的SQLAlchemy進行實例化時,self.Model長這樣cookie

        self.Model = self.make_declarative_base(model_class, metadata)

   而在make_declarative_base函數,會看到下列這段代碼,本質上是和SQLAlchemy同樣的session

        if not isinstance(model, DeclarativeMeta):
            model = declarative_base(
                cls=model,
                name='Model',
                metadata=metadata,
                metaclass=DefaultMeta
            )

 

  另外建立有一個函數db.create_all的函數,若是是離線腳本進行建立,則須要用到Flask的上下文app

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from sansa import create_app
from sansa import db

app = create_app()

with app.app_context():
    db.create_all()

   上面建立表過程當中,還須要注意的是 在create_app裏,你要把定義好的表加載進來(也就是導入進來,原理和導入藍圖是同樣的),而且導入要在實例化db後,由於model裏要用到db

 

  而操做表,什麼engine和拿鏈接都不用你作了,直接db.session進行操做就能夠了

    """
    db.session.add(models.Users(username='alex', pwd='123', gender=1))
    db.session.commit()

    obj = db.session.query(models.Users).filter(models.Users.id == 1).first()
    print(obj)

    PS: db.session和db.create_session
    """
    # db.session.add(models.Users(username='wupeiqi1', email='wupeiqi1@xx.com'))
    # db.session.commit()
    # db.session.close()
    #
    # db.session.add(models.Users(username='wupeiqi2', email='wupeiqi2@xx.com'))
    # db.session.commit()
    # db.session.close()
    # db.session.add(models.Users(username='alex1',email='alex1@live.com'))
    # db.session.commit()
    # db.session.close()



    user_list = db.session.query(models.Users).all()
    db.session.close()
    for item in user_list:
        print(item.username)

 

  Flask-SQLAlchemy主要作了這幾件事

  • 讀取配置
  • 建立ORM基類
  • 包含create_all
  • engine
  • 建立鏈接
相關文章
相關標籤/搜索