上节为大家讲解了flask-script如何使用?相信大家看过该文章后,使用flask-script已不是问题。下面我就结合数据库来讲讲flask-script,让大家能够深入了解flask-script用法。
注:在开始讲解之前,请确保你对ORM、数据库有一定的了解(懂的请忽略)。
首先,我们在项目下新建一个主app文件(app.py),其代码如下:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "index page"
if __name__ == '__main__':
app.run(debug=True)
由于案例涉及到数据库,涉及到数据库哪意味着就要配置数据库相关信息?是吧??下面我们就新建一个配置文件(config.py),其代码如下:
DIALCT = "mysql"
DRIVER = "pymysql"
USERNAME = "root"
PASSWORD = "root"
HOST = "127.0.0.1"
PORT = "3306"
DATABASE = "first_sqlalchemy"
DB_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALCT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)
SQLALCHEMY_DATABASE_URI = DB_URI
配置好数据库相关信息后,我们是不是还得建立ORM模型,然后将ORM模型映射到数据库中。为了方便管理,我们新建一个文件(models.py)用于存放模型相关代码,其代码如下所示:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
id = db.Column(db.Integer , primary_key=True , autoincrement=True)
name = db.Column(db.String(20) , nullable=False)
password = db.Column(db.String(50) ,nullable=False)
配置文件、ORM文件写好后,我们是不是还得在主app文件引用它们??引用代码如下:
import config
from modles import db
app.config.from_object(config)
db.init_app(app)
主app.py完整代码如下:
from flask import Flask
import config
from modles import db
app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)
@app.route("/")
def index():
db.create_all()
return "index page"
if __name__ == '__main__':
app.run(debug=True)
打开mysql 命令行工具,我们查看下表中是否有user这个表。
之前创建过user这个表,我们把它删除。
删除user表后,我们再执行主app文件,如果执行没有报错,我们再查看下user表是否已成功映射到数据库中。
由上图可知,user表已成功映射到数据库中了。下面我们再创建一个manage.py文件,用与存放所有迁移脚本代码。其代码如下:
from flask_script import Manager
from app import app
manage = Manager(app)
@manage.option("-u","--username",dest="username")
@manage.option("-p","--password",dest="password")
def insert_user(username,password):
print("username:%s,password:%s"%(username,password))
if __name__ == '__main__':
manage.run()
打开命令行终端,输入下方命令:
python manage.py insert_user -u tom -p 19920709
运行上方命令,结果如下:
但这并不是我们想要的结果,我们想要运行上方命令后,传入的参数能够添加到user表中。
要想将传入的参数添加到user表中,我们是不是只需导入模型,然后实例化一个对象,然后再db.session.add....session.commit就可以了。是吧?
从主app文件中导入db,再从moldes文件中导入User模型,代码如下:
from app import app,db
from modles import User
然后再构建ORM对象并将其数据添加到表中,代码如下:
@manage.option("-u","--username",dest="username")
@manage.option("-p","--password",dest="password")
def insert_user(username,password):
# print("username:%s,password:%s"%(username,password))
user = User(name = username,password = password)
db.session.add(user)
db.session.commit()
在运行命令之前,我们先看看user表中是否有数据,如果没有数据我们再运行下方命令:
python manage.py insert_user -u tom -p 19920709
然后再查看user表,如果不出意外的话,结果如下所示:
通常情况下,flask-script会结合flask-migrate使用,后面我会讲解flask-migrate结合flask-script使用。大家只有熟悉了flask-script,在后面讲解flask-migrate的时候,就会变得非常轻松!!