11.7 Flask flask-sqlalchemy组件

概念

把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'

猜你喜欢

转载自www.cnblogs.com/shijieli/p/10355861.html