1. 程式人生 > >11.7 Flask flask-sqlalchemy組件

11.7 Flask flask-sqlalchemy組件

int 視圖 password init mov charset 創建 utf8 模板

概念

把Flask和SQLAlchemy結合在一起,粘合劑

更加方便了,不再需要自己手動寫鏈接池了

但是基礎操作還是和SQLAlchemy 一樣

使用方式

下載安裝

pip3 install flask-sqlalchemy

鏈接數據庫

格式

pymysql
    mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]

配置文件中添加

SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:[email protected]:3306/yangtuoDB?charset=utf8
"

SQLALCHEMY_POOL_SIZE = 10

SQLALCHEMY_MAX_OVERFLOW = 5

註冊初始化數據庫

函數級別

  不推薦

from flask_sqlalchemy import SQLAlchemy
from flask import FLask
app = Flask(__name__)
app.config[SQLALCHEMY_DATABASE_URI] ="mysql://root:12345@localhost/test"
db = SQLAlchemy(app)

全局

from flask_sqlalchemy import
SQLAlchemy from flask import FLask db = SQLAlchemy() def create_app(): app = Flask(__name__) db.init_app(app) return app

註意

必須在導入藍圖之前

from flask_sqlalchemy import SQLAlchemy

必須要在初始化之前導入模板,不然是沒辦法正確得到db

from .models import *

創建生成表

在離線腳本中操作數數據庫創建 create_all drop_all

from chun import db,create_app

app = create_app()
app_ctx = app.app_context()     # app_ctx = app/g
with app_ctx:                     # __enter__,通過LocalStack放入Local中
    db.create_all()             # 調用LocalStack放入Local中獲取app,再去app中獲取配置

操作表

#方式一
        db.session  #會自動創建一個session
        db.session.add()
        db.session.query(models.User.id,models.User.name).all()
        db.session.commit()
        db.session.remove()
#方式二
        導入models
        models.User.query

目錄結構

chun    項目名
    
    chun    與項目名同名的文件夾 
        
        static    靜態文件相關
        
        templates    模板文件相關
        
        view    視圖函數
        
            acctount.py        具體視圖函數
            
            user.py        具體視圖函數
            
        __init__.py        初始化文件
        
        models.py    數據庫相關

    create_table.py        數據庫創建離線腳本

    settings.py        配置文件 

chun.chun.__init__.py

用於初始化,創建DB對象,app對象

from flask import Flask
from flask_session import Session


from flask_sqlalchemy import SQLAlchemy 
db = SQLAlchemy() 

from .views.account import ac
from .views.user import us


from .models import *

def create_app():
    app = Flask(__name__)
    app.config.from_object(settings.ProConfig)
    app.register_blueprint(ac)
    app.register_blueprint(us)

    db.init_app(app) # 

    return app

chun.settings.py

配置文件相關存放,數據庫的鏈接之類的

from redis import Redis

class BaseConfig(object):

    # 
    SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:[email protected]:3306/s9day122?charset=utf8"
    SQLALCHEMY_POOL_SIZE = 10
    SQLALCHEMY_MAX_OVERFLOW = 5
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    # 
    pass

chun.chun.models.py

數據庫表文件

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column
from sqlalchemy import Integer,String,Text,Date,DateTime
from sqlalchemy import create_engine
from chun import db

class Users(db.Model):  
    __tablename__ = users

    id = Column(Integer, primary_key=True)
    name = Column(String(32), index=True, nullable=False)

chun.create_table.py

數據庫離線操作腳本文件,用於 操作 app,g,db 的相關腳本

from chun import db,create_app

app = create_app()            
app_ctx = app.app_context() 
with app_ctx: 
    db.create_all() 

class ProConfig(BaseConfig):
    pass

chun.chun.views.user.py

視圖請求回應相關的文件

from flask import Blueprint
from chun import db
from chun import models
us = Blueprint(us,__name__)


@us.route(/index)
def index():
    # 使用SQLAlchemy在數據庫中插入一條數據
    # db.session.add(models.Users(name=‘yangtuo‘,depart_id=1))
    # db.session.commit()
    # db.session.remove()
    result = db.session.query(models.Users).all()
    print(result)
    db.session.remove()

    return Index

11.7 Flask flask-sqlalchemy組件