首页 > 数据库 >flask-sqlalchemy,flask-migrate

flask-sqlalchemy,flask-migrate

时间:2023-04-11 19:01:47浏览次数:37  
标签:__ sqlalchemy flask app db migrate import

目录

flask-sqlalchemy使用

把sqlalchemy集成到flask中使用

models

# 导入
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, Index

Base = declarative_base()

class Book(Base):
    __tablename__= 'books'
    id = Column(Integer, primary_key=True)
    name = Column(String(32))

if __name__ == '__main__':
    # 创建引擎对象
    engine = create_engine('mysql+pymysql://root:[email protected]:3306/ddd')
    # 同步到数据库
    Base.metadata.create_all(engine)

封装sqlalchemy session对象

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import scoped_session

engine = create_engine('mysql+pymysql://root:[email protected]:3306/ddd')
Session = sessionmaker(bind=engine)

session = scoped_session(Session)

在flask视图函数导入使用

from flask import Flask
from session_py import session
from models import Book
app = Flask(__name__)


@app.route('/')
def index():
    session.add(Book(name='金瓶没'))
    session.commit()
    session.close()
    return '增加成功'

if __name__ == '__main__':
    app.run()

这样过于繁琐,有个第三方

flask-sqlalchemy 帮助咱们快速的集成到flask中

安装

pip install flask-SQLAlchemy

导入

from flask_sqlalchemy import SQLAlchemy

配置数据库链接

app.config.from_pyfile('settings.py')

新建一个settings

SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:[email protected]:3306/ddd?charset=utf8"
SQLALCHEMY_POOL_SIZE = 5
SQLALCHEMY_POOL_TIMEOUT = 30
SQLALCHEMY_POOL_RECYCLE = -1
# 追踪对象的修改并且发送信号
SQLALCHEMY_TRACK_MODIFICATIONS = False

实例化得到db对象

db = SQLAlchemy()

注册app

db.init_app(app)

以后建模型表都继承db.model 写字段类型都用db开头,sqlalchemy session也用db开头


from flask_sqlalchemy1 import db
class Book(db.Model):
    __tablename__ = 'books'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))

from flask import Flask
# 导入flask_sqlalchemy
from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)
# 配置数据库连接用文件
app.config.from_pyfile('settings.py')
# 实例化得到db对象
db = SQLAlchemy()
# 将db注册到app上
db.init_app(app)


@app.route('/')
def index():
    from models import Book  # 有循环导入问题,用flask项目就不会了
    db.session.add(Book(name='西游记'))
    db.session.commit()
    return '增加成功'


if __name__ == '__main__':
    app.run()

flask-migrate

可以实现与django一样的python manage.py makemigrations 与migrate的命令, 原本的sqlalchemy不可以 删除或修改字段,通过这个就可以实现。

注意版本

Flask:2.2.2   flask-script:2.0.3 

安装

pip3.8 install flask-migrate==2.7.0

项目目录

sansa
	views
       __init__.py  # 实例化得到db对象并写create_app函数 返回app
       models.py   #  导入db对象 写表模型
   manage.py      #  导入init的create_app方法产生含有db的app,使用flask-script 定制命令,使用flask_migrate的Migrate 包裹一下 db 和app 把命令增加到flask-script中取
   settings.py

init.py


from flask import Flask
from flask_sqlalchemy import SQLAlchemy
# 第一步:类实例化得到对象
db = SQLAlchemy()

from .models import *
from .views import account

def create_app():
    app = Flask(__name__)
    app.config.from_object('settings.DevelopmentConfig') # 配置数据库连接环境
    #第二步: 将db注册到app中
    db.init_app(app)
    # 注册蓝图
    app.register_blueprint(account.account)
    return app

settings



class BaseConfig(object):

    SQLALCHEMY_DATABASE_URI = "mysql+pymysql://[email protected]:3306/ddd?charset=utf8"
    SQLALCHEMY_POOL_SIZE = 5
    SQLALCHEMY_POOL_TIMEOUT = 30
    SQLALCHEMY_POOL_RECYCLE = -1
    # 追踪对象的修改并且发送信号
    SQLALCHEMY_TRACK_MODIFICATIONS = False


class ProductionConfig(BaseConfig):
    pass


class DevelopmentConfig(BaseConfig):
    pass


class TestingConfig(BaseConfig):
    pass

models


from . import db
# 第三步:把db导入,直接继承db.Model

class Users(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    # email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return '<User %s>' % self.username

manage.py

"""
     python3 manage.py db init   只执行一次,初始化的时候使用  会在项目路径下生成migrations文件夹,用来管理表变化
     python3 manage.py db migrate  等同于django的makemigrations,只是做个记录
     python3 manage.py db upgrade  等同于django的migrate把变化同步到数据库中
"""
from sansa import create_app
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from sansa import db

app = create_app()
# flask-script的使用
# 第一步:初始化出flask_script的manage
manager = Manager(app)
# 第二步:使用flask_migrate的Migrate  包裹一下app和db(sqlalchemy对象)
Migrate(app, db)

# 第三步:把命令增加到flask-script中去
manager.add_command('db', MigrateCommand)  # 多出三个命令 init  migrate  upgrade
if __name__ == '__main__':
    manager.run()

总结

1.以后第一次执行一下
    	python manage.py db init  # 生成一个migrations文件夹,里面以后不要动,记录迁移的编号

2. 以后在models.py 写表,加字段,删字段,改参数
   	只需要执行
    	python manage.py db migrate  # 记录
       python manage.py db upgrade  # 真正的同步进去

标签:__,sqlalchemy,flask,app,db,migrate,import
From: https://www.cnblogs.com/LiaJi/p/17307304.html

相关文章

  • flask之sqlalchemy快速插入数据-scoped_session线程安全-基本增删改查-表模型一对多-
    目录flask之sqlalchemy快速插入数据-scoped_session线程安全-基本增删改查-表模型一对多-多对多-连表查询今日内容1sqlalchemy快速插入数据2scoped_session线程安全2.1基本使用2.2加在类上的装饰器3基本增删改查3.1基本增删改查和高级查询3.2原生sql3.3django中执行原生sq......
  • flask-sqlalchemy使用,flask-migrate使用
    flask-sqlalchemy使用,flask-migrate使用flask-sqlalchemy使用集成到flask中,我们可以用sqlalchemy来做,就是比较的繁琐现在有一个第三方的flask-sqlalchemy,可以快速的集成到flask中#使用flask-sqlalchemy集成1.下载flask-sqlalchemy#pipinstallflask-sqlalchemy2.导......
  • sqlalchemy详解及 快速使用
    sqlalchemy详解及快速使用快速使用#flask中没有orm框架,对象关系映射,方便我们快速操作数据库#flask,fastapi中用sqlalchemy居多#SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在DBAPI之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用......
  • Flask快速入门day 06 (sqlalchemy的使用,scoped-session线程安全)
    目录Flask框架之sqlalchemy的使用一、SQLAlchemy基本使用1、简介2、操作原生sql3、表创建4、ORM操作4、1.基本使用4、2.增删改查4、3.高级查询二、外键关系1、一对多1、1.表模型1、2.新增和基于对象的查询2、多对多2、1.表模型2、2.新增和基于对象查询3、连表查询三、scoped_sessi......
  • sqlalchemy 报错 lost connection 解决
    最近在开发过程中遇到一个sqlalchemylostconnection的报错,记录解决方法。报错信息python后端开发,使用的框架是Fastapi+sqlalchemy。在一个接口请求中报错如下:[2023-03-2406:36:35+0000][217][ERROR]ExceptioninASGIapplicationTraceback(mostrecentcalllast)......
  • flask----day06()
    简历如何写--------------------------------------------------------#讲完后,用3---5天时间,把简历写好,发我看一下,就可以开始投了#你写简历的目的:只是为了有个面试机会#第一步:找一个简历模板---》导出成pdf也可以使用md写https://m.job592.com/doc/ -下载,在模板的......
  • flask6
    今日内容1sqlalchemy快速插入数据#sqlalchemy是什么orm框架,跟其他web框架没有必然联系,可以独立使用#安装,快速使用,执行原生sql#创建表和删除表 -不能创建数据库-不能修改字段(增加,删除)#使用orm插入fromsqlalchemyimportcreate_enginefromsqlalch......
  • flask框架05 信号 flask-script命令 sqlalchemy创建操作数据表
    今日内容详细目录今日内容详细1信号1.1django信号2flask-script3sqlalchemy快速使用4sqlalchemy介绍和快速使用4.1sqlalchemy介绍和快速使用5创建操作数据表1信号#Flask框架中的信号基于blinker(安装这个模块),其主要就是让开发者可是在flask请求过程中定制一些用户行为......
  • flask-day6——sqlalchemy快速插入数据、scoped_session线程安全、sqlalchemy基本增删
    目录一、sqlalchemy快速插入数据二、scoped_session线程安全2.1基本使用2.2加在类上的装饰器三、基本增删查改3.1基本增删查改和高级查询3.2原生sql3.3django中执行原生sql四、一对多4.1表模型4.2新增和基于对象的查询五、多对多5.1表模型5.2增加和基于对象的跨表查询六......
  • 信号、flask-script、sqlalchemy 快速使用、sqlalchemy介绍和快速使用、创建操作数据
    目录1信号1.2django信号2flask-script3sqlalchemy快速使用4sqlalchemy介绍和快速使用4.1原生操作的快速使用5创建操作数据表1信号#Flask框架中的信号基于blinker(安装这个模块),其主要就是让开发者可是在flask请求过程中定制一些用户行为flask和django都有#观察者模......