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:123456@127.0.0.1:3306/yangtuoDB?charset=utf8"

SQLALCHEMY_POOL_SIZE = 10

SQLALCHEMY_MAX_OVERFLOW = 5

 

注册初始化数据库

函数级别

  不推荐

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

 

全局

from flask_sqlalchemy import SQLAlchemyfrom flask import FLaskdb = 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_appapp = create_app()app_ctx = app.app_context() # app_ctx = app/gwith 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 Flaskfrom flask_session import Sessionfrom flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() from .views.account import acfrom .views.user import usfrom .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 Redisclass BaseConfig(object): # SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123456@127.0.0.1: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_basefrom sqlalchemy import Columnfrom sqlalchemy import Integer,String,Text,Date,DateTimefrom sqlalchemy import create_enginefrom chun import dbclass 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_appapp = 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 Blueprintfrom chun import dbfrom chun import modelsus = 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

 

相关文章