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组件的主要内容,如果未能解决你的问题,请参考以下文章
安装了sql-alchemy但导入sql_alchemy时失败
如何手动下载 GitHub iOS 代码并使其在 XCode 11.7 中运行?