学习flask的番外2
项目环境
Windows10
Python=3.6.8
虚拟环境:Anaconda
IDE:pycharm
时间:2019.4.20
写在前面
今天来实验一下Flask中关于数据库的操作,分为三个部分。第一个部分是连接数据库创建表和对表的操作,第二个部分是直接数据迁移,第三个部分是从已有的表生成模型。一个一个的写。
第一部分,数据库连接
创建项目
首先创建一个Flask的项目,项目结构如下:
这只是一个最为基础的项目,我们的功能都放在这里面实现吧。
配置数据库相关参数
app.config["SQLALCHEMY_DATABASE_URI"] = \
"mysql+pymysql://root:420420@127.0.0.1:3306/flask"
这个是配置SQLAlchemy的URI的,然后格式请去参考我的上一篇文章。然后呢创建一个SQLAlchemy的对象db和创建一个模型:
db = SQLAlchemy(app)
class User(db.Model):
uid = db.Column(db.INTEGER, primary_key=True)
uname = db.Column(db.String(20), unique=Flask, nullable=False)
然后我们可以通过Flask Shell来使用,首先是打开你的shell:
#打开shell
flask shell
from app import db
bd.create_all()
然后你就可以在数据库中看到你的表了:
创建的表
或者是写一个函数(建议写函数):
@app.route("/a/")
def create():
db.create_all()
return "<h1>创建数据库成功</h1>"
通过访问后你就可以查看一下会发现也成功了。
插入数据
还是写一个函数来实现数据的插入,在flask中我们使用session来完成相关操作,这个session是db的:
@app.route('/insert')
def add_user():
user = User()
name = "我将有{}个女朋友".format(random.randint(0, 50))
user.uname = name
db.session.add(user)
db.session.commit()
return "<h1>add sucessful </h1>"
然后你访问你的路由几次,你就可以在数据库中看到你插入的数据,就像是这样
在执行完add等操作后要使用commit提交才会及时生效。
查询数据
同样的我们来查询一下数据吧,老规矩还是写一个函数:
@app.route('/find')
def find_user():
user = User.query.all()
for u in user:
print(u.uname)
return "ok"
来看一下输出:
我将有18个女朋友
我将有28个女朋友
我将有50个女朋友
这是我们表里的数据对吧,同时这里的user是一个list
第二部分,数据迁移
为什么要进行数据迁移
当我们在进行开发或者学习的时候,也许我们最开始创建的模型太过于简陋然后需要我们增加一些字段,那么怎么来创建表呢?使用SQLAlchemy只有表不存在的时候才会创建,所以只有暴力的删除之前的表然后再进行创建,关键是这样你会破会表里面的数据,实在是不太美。所以会用到数据迁移,我在这里用到的是Flask-Migrate这样一个插件。
安装Flask-Migrate
pip install flask-migrate
然后这是我们修改过后的模型,添加了一个email的属性:
class User(db.Model):
uid = db.Column(db.INTEGER, primary_key=True)
uname = db.Column(db.String(20), unique=False, nullable=False)
uemail = db.Column(db.String(40), unique=False, nullable=False)
然后我们开始使用我们的migrate:
from flask_migrate import Migrate
migrate = Migrate(app, db)
然后在控制台输入,如果你不是使用的Anaconda来管理环境可以在你装有flask的环境里执行这个:
flask db init
执行初始化操作
然后你就会发现你的项目下多了一个文件夹,然后这个文件夹里面就有了一些迁移文件,我们可以开始数据迁移了。
在控制台输入:
flask db migrate
使用这个命令来生成迁移脚本:
生成迁移脚本
然后进行迁移:
最后你可以在你的数据库中看到你的字段已经添加到你的表当中:
迁移后的数据
我在这里也只是简单的一个练习,你可以去Flask-Migrate的官网看更详细的使用。
请你移步Flask-Migrate的官网
第三部分,逆向生成model
出现情况
有些时候,我们需要直接使用已经存在的数据库和表,我们在flask中使用的话需要生成对应的model然后才能来使用,自己一个个的建?太麻烦了,也不推荐,我们可以使用Flask-Sqlacodegen这个扩展插件
开始试试:
pip install flask-sqlacodegen
我们在创建的时候先来创建一个表试试吧:
创建表
然后在命令行使用:
flask-sqlacodegen "mysql+pymysql://root:420420@localhost:3306/flask" > model.py
你会发现你的项目下面多了一个model文件:
# coding: utf-8
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
metadata = Base.metadata
class Student(Base):
__tablename__ = 'Student'
studentid = Column(Integer, primary_key=True)
studentname = Column(String(100))
studentclass = Column(Integer)
class User(Base):
__tablename__ = 'user'
uid = Column(Integer, primary_key=True)
uname = Column(String(20), nullable=False)
uemail = Column(String(40))
基本上就成功了,剩下的就是自己完善。
写在后面
我们在这里基本上就完成了数据库的常用操作,本文只做笔记,如果想要学习得更好,请移步各个插件的官方文档。当然如果那里写得不对,谢谢你的指出。