flask-sqlalchemy组件
项目目录结构:
flask目录 # 项目名 |--- flaskdir |--- static # 静态文件 |--- templates # 模板 |--- models.py # models 文件 |--- __init__.py # 创建 app 对象 |--- views # 视图 |--- account.py |--- user.py |--- manage.py # 入口程序 |--- settings.py # 配置文件 |--- create_table.py # 在数据库中创建表的脚本
manage.py
from flaskdir import create_app app = create_app() if __name__ == "__main__": app.run()
settings.py
from redis import Redis class BaseConfig(object): # SESSION_TYPE = "redis" # SESSION_REDIS = Redis(host="127.0.0.1",port=6379) # ##### SQLAlchemy 相关配置 ##### SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:[email protected]:3306/dbtest?charset=utf8" # 连接 数据库 SQLALCHEMY_POOL_SIZE = 10 # 连接池大小 SQLALCHEMY_MAX_OVERFLOW = 5 # 连接池 最大溢出 SQLALCHEMY_TRACK_MODIFICATIONS = False pass class ProConfig(BaseConfig): pass
create_table.py
# 在数据库中创建表的脚本 from flaskdir import db,create_app # 导入 db app = create_app() app_ctx = app.app_context() # 导入 Flask 的 app 上下文 with app_ctx: # __enter__ 方法:通过 LocalStack 放入 Local 中 db.create_all() # 在 with app_ctx 中,执行 db.create_all();调用 LocalStack 获取 Local 中的 app,再去 app 中获取配置
flaskdir/__init__.py
from flask import Flask from flask_session import Session from flask_sqlalchemy import SQLAlchemy # 从 flask-sqlalchemy 引入 SQLAlchemy # flask-sqlalchemy 的使用方法: # 第一步: 导入并实例化 SQLAlchemy db = SQLAlchemy() # db 这个对象中含有 SQLAlchemy 需要的所有东西,唯独少 数据库连接 # 注意: SQLAlchemy 的实例化必须要在 蓝图的上面 from .views.account import ac from .views.user import usr from .models import * # 也要导入 models 中的类 def create_app(): app = Flask(__name__) app.config.from_object("settings.ProConfig") app.register_blueprint(ac) app.register_blueprint(usr) # Flask-session:第一步要实例化 Session;第二步要加配置 # Session(app) # 第三步:注册:app 中含有所有的配置文件,所以这一步是去 配置文件中读取 数据库连接 db.init_app(app) return app
flaskdir/models.py
from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, Index from flaskdir import db # 第二步:让 Users 继承 db.Model;db.Model 就是 SQLAlchemy 中的 Base class Users(db.Model): __tablename__ = ‘users‘ id = Column(Integer, primary_key=True) name = Column(String(32), index=True, nullable=False) # email = Column(String(32), unique=True) # ctime = Column(DateTime, default=datetime.datetime.now) # extra = Column(Text, nullable=True)
flaskdir/views/user.py
from flask import Blueprint from flaskdir.models import * # 导入 model 类 from flaskdir import db usr = Blueprint("sur",__name__) @usr.route("/index") def login(): # 使用flask-sqlalchemy 在数据库 users 表中插入一条数据 """ db.session.add(Users(name="neo")) # db,session 会为每个线程在 数据库连接池 中获取一个连接;基于 scoped_session 实现的 db.session.commit() # 提交 db.session.remove() # 把连接归还给连接池 """ # 使用 flask-sqlalchemy 从数据库 users 表中获取数据 ret = db.session.query(Users).all() print(ret) db.session.remove() return "index"
flaskdir/views/account.py 略
flask-sqlalchemy用法归纳:
a. 下载安装 pip3 install flask-sqlalchemy b. chun.__init__.py 导入并实例化SQLAlchemy from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() 注意事项: - 必须在导入蓝图之前 - 必须导入models.py c. 初始化 db.init_app(app) d. 在配置文件中写入配置 # ##### SQLALchemy配置文件 ##### SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:[email protected]:3306/s9day122?charset=utf8" SQLALCHEMY_POOL_SIZE = 10 SQLALCHEMY_MAX_OVERFLOW = 5 e. 创建models.py中的类(对应数据库表) flaskdir/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) depart_id = Column(Integer) f. 生成表(使用app上下文) from flaskdir 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中获取配置 g. 基于ORM对数据库进行操作。 from flask import Blueprint from flaskdir import db from flaskdir import models us = Blueprint(‘us‘,__name__) @us.route(‘/index‘) def index(): # 使用SQLAlchemy在数据库中插入一条数据 # db.session.add(models.Users(name=‘高件套‘,depart_id=1)) # db.session.commit() # db.session.remove() result = db.session.query(models.Users).all() print(result) db.session.remove() return ‘Index‘
补充: with obj 的用法
class Foo: def __init__(self): pass def __enter__(self): print("进入with obj") def __exit__(self, exc_type, exc_val, exc_tb): print("退出with obj") obj = Foo() with obj: # with 对象 会自动触发类的 __enter__ 方法 print("在with obj 中") """ with 对象: 时,刚进入 缩进时会自动触发 __enter__ 方法 缩进执行完后,会自动触发 __exit__ 方法 """ # 打印结果: # 进入with obj # 在with obj 中 # 退出with obj
原文地址:https://www.cnblogs.com/neozheng/p/10317683.html
时间: 2024-11-06 13:38:06