11.7 Flask flask-sqlalchemy組件
阿新 • • 發佈:2019-02-08
int 視圖 password init mov charset 創建 utf8 模板
概念
把Flask和SQLAlchemy結合在一起,粘合劑
更加方便了,不再需要自己手動寫鏈接池了
但是基礎操作還是和SQLAlchemy 一樣
使用方式
下載安裝
pip3 install flask-sqlalchemy
鏈接數據庫
格式
pymysql
mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
配置文件中添加
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:[email protected]:3306/yangtuoDB?charset=utf8"
SQLALCHEMY_POOL_SIZE = 10
SQLALCHEMY_MAX_OVERFLOW = 5
註冊初始化數據庫
函數級別
不推薦
from flask_sqlalchemy import SQLAlchemy from flask import FLask app = Flask(__name__) app.config[‘SQLALCHEMY_DATABASE_URI‘] ="mysql://root:12345@localhost/test" db = SQLAlchemy(app)
全局
from flask_sqlalchemy importSQLAlchemy from flask import FLask db = SQLAlchemy() def create_app(): app = Flask(__name__) db.init_app(app) return app
註意
必須在導入藍圖之前
from flask_sqlalchemy import SQLAlchemy
必須要在初始化之前導入模板,不然是沒辦法正確得到db
from .models import *
創建生成表
在離線腳本中操作數數據庫創建 create_all drop_all
from chun 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中獲取配置
操作表
#方式一 db.session #會自動創建一個session db.session.add() db.session.query(models.User.id,models.User.name).all() db.session.commit() db.session.remove() #方式二 導入models models.User.query
目錄結構
chun 項目名 chun 與項目名同名的文件夾 static 靜態文件相關 templates 模板文件相關 view 視圖函數 acctount.py 具體視圖函數 user.py 具體視圖函數 __init__.py 初始化文件 models.py 數據庫相關 create_table.py 數據庫創建離線腳本 settings.py 配置文件
chun.chun.__init__.py
用於初始化,創建DB對象,app對象
from flask import Flask from flask_session import Session from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() from .views.account import ac from .views.user import us from .models import * def create_app(): app = Flask(__name__) app.config.from_object(‘settings.ProConfig‘) app.register_blueprint(ac) app.register_blueprint(us) db.init_app(app) # return app
chun.settings.py
配置文件相關存放,數據庫的鏈接之類的
from redis import Redis class BaseConfig(object): # SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:[email protected]:3306/s9day122?charset=utf8" SQLALCHEMY_POOL_SIZE = 10 SQLALCHEMY_MAX_OVERFLOW = 5 SQLALCHEMY_TRACK_MODIFICATIONS = False # pass
chun.chun.models.py
數據庫表文件
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column from sqlalchemy import Integer,String,Text,Date,DateTime from sqlalchemy import create_engine from chun import db class Users(db.Model): __tablename__ = ‘users‘ id = Column(Integer, primary_key=True) name = Column(String(32), index=True, nullable=False)
chun.create_table.py
數據庫離線操作腳本文件,用於 操作 app,g,db 的相關腳本
from chun import db,create_app app = create_app() app_ctx = app.app_context() with app_ctx: db.create_all() class ProConfig(BaseConfig): pass
chun.chun.views.user.py
視圖請求回應相關的文件
from flask import Blueprint from chun import db from chun import models us = Blueprint(‘us‘,__name__) @us.route(‘/index‘) def index(): # 使用SQLAlchemy在數據庫中插入一條數據 # db.session.add(models.Users(name=‘yangtuo‘,depart_id=1)) # db.session.commit() # db.session.remove() result = db.session.query(models.Users).all() print(result) db.session.remove() return ‘Index‘
11.7 Flask flask-sqlalchemy組件