Flask——flask_sqlchemy,flask_script,flask_migrate基本操作

Flask-SQLAlchemy

flask_sqlalchemy插件是对SQLAlchemy进行简单的封装,使我们在Flask中能够更方便的使用SQLAlchemy。安装:pip install flask-sqlchemy

创建引擎

创建引擎也不需要使用 create_engine了

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

HOSTNAME = '127.0.0.1'
DATABASE = 'flask_demo1'
PORT = 3306
USERNAME = 'root'
PASSWORD = 'root'
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)

app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL  # 创建引擎
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

db = SQLAlchemy(app)

创建表

使用类创建表的时候需要继承 db.Model ,这里的tablename可以不定义,如果不定义的话,默认以类名小写命名。因为使用了flask_sqlalchemy,所以创建列的时候,不需要再导入String,Integer等等。

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50))
    # 不需要再从SQLAlchemy中导入

class Article(db.Model):
    __tablename__ = 'article'
    # 如果不写tablename 那么会以模型的名字小写命名  article
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(50))
    uid = db.Column(db.Integer, db.ForeignKey('user.id'))
    users = db.relationship('User', backref = 'article')

创建表的映射也更加简单了

# db.drop_all()
db.create_all()

添加数据

admin = User(name='xxxx')
article = Article(title='python')
article.users = admin
db.session.add(article)
db.session.commit()

删除数据

ret = User.query.filter(User.name=='admin').first()
db.session.delete(ret)

db.session.commit()

Flask-Script

flask_script可以通过命令行的方式来操作Flask。例如通过命令跑一个开发版本的服务器、设置数据库,定时任务等。安装 :pip install flask-script

from flask_script import  Manager
from demo1 import app   

manage = Manager(app)
# 命令行执行自己定义的函数
@manage.command
def index():
    # 命令行中 return  命令行无显示
    print("hello index")

# 命令行传参
@manage.option("-u","--name",dest='username')
def info(username):
    print(username)

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

在这里插入图片描述

flask_script通过命令行添加数据

自定义的config文件

HOSTNAME = '127.0.0.1'
DATABASE = 'flask_demo1'
PORT = 3306
USERNAME = 'root'
PASSWORD = 'root'
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)

SQLALCHEMY_DATABASE_URI = DB_URL  # 创建引擎
SQLALCHEMY_TRACK_MODIFICATIONS= True

模型models.py

from new_three import db
class AdminUser(db.Model):
    __tablename__ = 'damin_users'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50))
    email = db.Column(db.String(120))

添加数据 manage.py

from flask_script import Manager
from flask_script_demo import app
from models import AdminUser
from new_three import db

manage = Manager(app)

@manage.option('-u', '--name', dest='name')
@manage.option('-e', '--email', dest='email')
def add_user(name, email):
    user = AdminUser(name=name, email=email)
    db.session.add(user)
    db.session.commit()
    print("添加成功")

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

new_three.py 来处理models.py和flasj_script_demo.py互相导入出错的问题

from flask_sqlalchemy import SQLAlchemy

#没有导入app 通过 db.init_app(app)
db = SQLAlchemy()

flask_script_demo.py

from flask import Flask
import config
from new_three import db
app = Flask(__name__)
app.config.from_object(config)

db.init_app(app)

在这里插入图片描述

Flask-Migrate

在实际的开发中,经常会发生修改数据的操作,一般修改数据不会直接去手动修改,而是去修改ORM模型,再把它映射到数据库中。flask-migrate就是用来做这个的。安装:pip install flask-migrate

通过这个文件去映射数据库


from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand
from flask_script_demo import app
from new_three import db

#映射哪个模型,导入哪个
from models import AdminUser

manage = Manager(app)
Migrate(app,db)
manage.add_command('db',MigrateCommand)

在命令行输入python manage.py db_init初始化
输入 python manage.py db migrate映射到表
在这里插入图片描述
此时查看数据库,并没有我们创建的表,但多了一个版本文件

在这里插入图片描述
此时并没有把模型映射到数据库中,因为还需要在命令行输入python manage..py db upgrade
现在数据库中就有了我们要映射的表
在这里插入图片描述
如果修改了模型里面的字段名字或者添加字段,在命令行不需要进行初始化,直接 python manage.py db migrate python manage.py db upgrade就可以添加到数据库里面了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值