11.7 Flask flask-sqlalchemy组件

Posted 坨之歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:[email protected]/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组件的主要内容,如果未能解决你的问题,请参考以下文章

Flask 入门教程:第一章节路由和视图

3天掌握Flask开发项目系列博客之二,操作数据库

安装了sql-alchemy但导入sql_alchemy时失败

如何手动下载 GitHub iOS 代码并使其在 XCode 11.7 中运行?

11.6 MariaDB安装 11.7/11.8/11.9 Apache安装

11.7 CSP赛前集训小结