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

flask-sqlalchemy使用,flask-migrate使用

时间:2023-04-11 16:46:32浏览次数:43  
标签:__ sqlalchemy flask app py db migrate SQLALCHEMY

flask-sqlalchemy使用,flask-migrate使用

flask-sqlalchemy使用

集成到flask中,我们可以用sqlalchemy来做,就是比较的繁琐
现在有一个第三方的flask-sqlalchemy,可以快速的集成到flask中

# 使用flask-sqlalchemy集成
1.下载flask-sqlalchemy   # pip install flask-sqlalchemy
2.导入flask-sqlalchemy   # from flask-sqlalchemy improt SQLAlchemy
3.实例化得到对象          # db = SQLAlchemy()
4.视图函数中使用session   # 全局的session
5.在py文件中继承Model     # db.Model
6.写入字段                # useranem= db.Column(db.String(80),unique=True,nullable=False)
7.在配置文件中加入         # SQLALCHEMY_DATABASE_URI = create_engine("mysql+pymysql://[email protected]:3306/aaa")
					    # SQLALCHEMY_POOL_SIZE = 5
                          #  SQLALCHEMY_POOL_TIMEOUT = 30
                          #  SQLALCHEMY_POOL_RECYCLE = -1
                          # 追踪对象的修改并且发送信号
                          #  SQLALCHEMY_TRACK_MODIFICATIONS = False

py文件

from flask import Flask
# from flask_sqlalchemy improt SQLAlchemy
from flask_sqlalchemy import SQLAlchemy


app=Flask(__name__)
app.config.from_pyfile('settings.py')
# 实例化得到对象
db = SQLAlchemy()
# 将db注册到app中
db.init_app(app)

@app.route('/')
def index():
    from models import Book
    db.session.add(Book(name='xxxxx'))
    db.session.commit()
    return '增加成功'

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

settings.py

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

model.py

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

flask-migrate使用

# 表发生变化,都会有记录的,自动同步到数据库中的
原生的sqlalchemy,不支持修改表的
flask-migrate可以实现类似于django的表迁移,将数据同步到数据库中
# django中表迁移
python manage.py makemigrations
python manage.py migrate
# 使用步骤
 flask:2.2.2   flask-script:2.0.3  
1 第一步:安装,依赖于flask-script
    pip3.8 install flask-migrate==2.7.0
2 在app所在的py文件中
    from flask_script import Manager
    from flask_migrate import Migrate, MigrateCommand
    manager = Manager(app)
    Migrate(app, db)
    manager.add_command('db', MigrateCommand) 

    manager.run() # 以后使用python manage.py runserver 启动项目

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

4 以后在models.py 写表,加字段,删字段,改参数

5 只需要执行
    python manage.py db migrate  # 记录
    python manage.py db upgrade  # 真正的同步进去
"""
     python3 manage.py db init   只执行一次,初始化的时候使用  会在项目路径下生成migrations文件夹,用来管理表变化
     python3 manage.py db migrate  等同于django的makemigrations,只是做个记录
     python3 manage.py db upgrade  等同于django的migrate把变化同步到数据库中
"""

manage.py

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
# python manage.py upgrade
if __name__ == '__main__':
    # app.run()
    manager.run()

model.py

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

setttings.py

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

标签:__,sqlalchemy,flask,app,py,db,migrate,SQLALCHEMY
From: https://www.cnblogs.com/zx0524/p/17306722.html

相关文章

  • 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都有#观察者模......
  • sqlalchemy快速插入数据、scoped_session线程安全、基本增删查改、一对多、 多对多、
    目录1sqlalchemy快速插入数据2scoped_session线程安全2.1基本使用2.2加在类上的装饰器3基本增删查改3.1基本增删查改和高级查询3.2原生sql3.3django中执行原生sql4一对多4.1表模型4.2新增和基于对象的查询5多对多5.1表模型5.2增加和基于对象的跨表查询6连表查询1......
  • flask信号
    信号Flask框架中的信号基于第三方模块,其主要就是让开发者可是在flask请求过程中定制一些用户行为,flask和django都有信号安装模块blinker(安装这个模块pipinstallblinker)使用场景#比如:用户表新增一条记录,就记录一下日志 -方案一:在每个增加后,都写一行代码---》后期要......