Flask整合各組件項目以及pipreqs的作用
阿新 • • 發佈:2019-02-15
image run key oot stat 唯一索引 param 使用命令 你知道
一、介紹
主要介紹flask_sqlalchemy、flask_script、flask_migrate這三個組件該如何整合到flask項目中,以及如何使用。
# 安裝組件 pip3 install flask_sqlalchemy pip3 install flask_script pip3 install flask_migrate # flask_sqlalchemy: 將Flask和SQLAlchemy很好的結合在一起 # flask_script: 用於生成命令,在項目根目錄路徑下使用命令 例如:python manage.py runserver# flask_migrate 用來實現數據庫遷移(依賴flask-script)
二、項目結構
所有的操作說明在代碼註釋中;下圖,migrations是數據庫遷移時生成的(不必理會),create_table.py是在還沒有使用flask-migrate組件時用來在數據庫中創建表的(不必理會),requirements.txt後續會有說明。
index.py:介紹了在視圖函數中如何進行數據庫操作
from flask import Blueprint from pro_flask import db from pro_flask import models idxView Code= Blueprint("index", __name__) @idx.route("/index") def index(): # 使用SQLAlchemy在數據庫插入一條數據 """ db.session.add_all([ models.UserInfo(name="佩奇"), models.UserInfo(name="喬治") ]) db.session.commit() db.session.remove() """ # 查詢 ret = db.session.query(models.UserInfo).all()print(ret) db.session.remove() return "Index"
__init__.py
from flask import Flask from flask_session import Session from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() # 把以後用到的所有數據庫相關的東西封裝在此(實例化必須在導入藍圖上面) """ flask_sqlalchemy使用步驟: 1、導入並實例化SQLAlchemy 2、在models.py中導入db,類繼承db.Model 3、在create_app函數中使用db.init_app(app),可以理解為去app中讀取配置文件 """ from pro_flask.views.index import idx from pro_flask.views.account import account from pro_flask.models import * def create_app(): app = Flask(__name__, template_folder="templates", static_folder="statics", static_url_path="/static") app.config.from_object("settings.BaseConfig") app.register_blueprint(idx) app.register_blueprint(account) # Session(app) db.init_app(app) # 依賴app中的配置文件 return appView Code
models.py:相當於Django中的models.py作用
from sqlalchemy import Column from sqlalchemy import Integer, String, UniqueConstraint, Index from . import db class UserInfo(db.Model): __tablename__ = "userinfo" id = Column(Integer, primary_key=True) name = Column(String(16), index=True, unique=True, nullable=False) __table_args__ = ( # UniqueConstraint("id", "name", name="unic_id_name"), # 聯合唯一索引 # Index("idx_age_birthday", "age", "birthday"), # 聯合索引 )View Code
create_table.py:可以讓你知道是如何在數據庫中創建表的
from pro_flask import db, create_app app = create_app() app_ctx = app.app_context() # app_ctx = app/g with app_ctx: # __enter__,通過LocalStack放入Local中 db.create_all() # 調用LocalStack放入Local中獲取app,再去app中獲取配置 """ 右鍵執行即可在數據庫中創建表; 但是不用這種操作,可以使用flask-migrate組件實現數據庫遷移; 具體使用方式,請看manage.py """View Code
manage.py:程序啟動文件
from pro_flask import db from pro_flask import create_app from flask_script import Manager from flask_migrate import Migrate, MigrateCommand app = create_app() manager = Manager(app) Migrate(app, db) manager.add_command("db", MigrateCommand) # 新增一個叫做"db"的命令 """ 數據庫遷移命令: python manage.py db init # 只執行第一次就行了,表結構修改後,執行下面兩個命令就可以了 python manage.py db migrate # 相當於Django中的makemigrations python manage.py db upgrade # 相當於Django中的migrate """ # @manager.command # def custom(arg): # """ # 按照位置傳參自定義命令 # python manage.py custom 123 # :param arg: # :return: # """ # print(arg) # 123 # # @manager.option("-n", "--name", dest="name") # @manager.option("-u", "--url", dest="url") # def cmd(name, url): # """ # 按照關鍵字傳參自定義命令 # python manage.py cmd -n pd -u https://www.baidu.com # :param name: # :param url: # :return: # """ # print(name, url) if __name__ == "__main__": # app.run() # 有了manager就可以寫成下面這種格式了 manager.run() # 啟動命令(在項目根目錄下執行命令) """ python manage.py runserver python manage.py runserver -h 127.0.0.1 -p 8080 """View Code
settings.py:如果使用DBUtils,也可以放在配置文件中
import redis class BaseConfig(object): # flask-session配置 # SESSION_TYPE = "redis" # SESSION_REDIS = redis.Redis(host="127.0.0.1",port=6379) # 使用Flask-SQAlchemy需要做以下配置 SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:""@127.0.0.1:3306/test_db?charset=utf8" SQLALCHEMY_POOL_SIZE = 10 # 連接池大小 SQLALCHEMY_MAX_OVERFLOW = 5 # 在連接池達到最大值後可以創建的連接數;當這些額外的連接回收到連接池後將會被斷開和拋棄。 SQLALCHEMY_POOL_TIMEOUT = 20 # 池中沒有連接最多等待的時間,否則報錯 SQLALCHEMY_TRACK_MODIFICATIONS = False class ProductConfig(BaseConfig): passView Code
1
Flask整合各組件項目以及pipreqs的作用