.Net Core

学习flask的番外2

2019-04-22  本文已影响6人  Yznx_请叫我小哥
the photo from unsplash

项目环境

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))

基本上就成功了,剩下的就是自己完善。

写在后面

  我们在这里基本上就完成了数据库的常用操作,本文只做笔记,如果想要学习得更好,请移步各个插件的官方文档。当然如果那里写得不对,谢谢你的指出。

上一篇下一篇

猜你喜欢

热点阅读