pip3 install Flask-SQLAlchemy
DIALECT = 'mysql' DRIVER = 'pymysql' USERNAME = 'root' PASSWORD = '808069' HOST = '127.0.0.1' PORT = '3306' DATABASE = 'cms' SQLALCHEMY_DATABASE_URI = '{}+{}://{}:{}@{}:{}/{}?charset=utf8'.format( DIALECT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE ) SQLALCHEMY_COMMIT_ON_TEARDOWN = True SQLALCHEMY_TRACK_MODIFICATIONS = True SQLALCHEMY_POOL_SIZE = 10 SQLALCHEMY_MAX_OVERFLOW = 5
from flask_sqlalchemy import SQLAlchemy from flask import Flask db = SQLAlchemy() def create_app(): app = Flask(__name__) app.config.from_object('settings') db = SQLAlchemy() db.init_app(app) return app
from ttt import create_app app = create_app() if __name__ == '__main__': app.run()
from manage import db class User(db.Model): __tablename__ = 'user' id = db.Column(db.INTEGER,primary_key=True) username = db.Column(db.String(80),unique=True) password = db.Column(db.String(80),nullable=False) class CodeCountRecord(db.Model): __tablename = 'codecountrecord' id = db.Column(db.INTEGER,primary_key=True) count = db.Column(db.INTEGER) data = db.Column(db.DATE) user = db.Column(db.ForeignKey('user.id'))
from ttt import db, create_app from ttt.models import * 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中獲取配置
這種方式即爲離線腳本(不用啓動項目)的方式建立數據庫python
直接右鍵運行models.py便可建立表mysql
from cms.models import User from manage import db def create_user(): # 建立一個新用戶對象 user = User() user.username = 'fuyong' user.password = '123' # 將新建立的用戶添加到數據庫會話中 db.session.add(user) # 將數據庫會話中的變更提交到數據庫中, 記住, 若是不 commit, 數據庫中是沒有變化的. db.session.commit() create_user()
def delete_user(): # 獲取用戶對象 user = User.query.filter_by(id=1).first() # 刪除用戶 db.session.delete(user) #提交數據庫會話 db.session.commit() delete_user()
def update_user(): # 獲取用戶對象 user = User.query.filter_by(id=2).first() # 修改用戶 user.password = '123567' #提交數據庫會話 db.session.commit() update_user()
def select_user(): # 查詢全部用戶 users_list = User.query.all() # 查詢用戶名稱爲 fuyong 的第一個用戶, 並返回用戶實例, 由於以前定義數據庫的時候定義用戶名稱惟一, 因此數據庫中用戶名稱爲 test 的應該只有一個. user = User.query.filter_by(username='fuyong').first() # or user = User.query.filter(User.username == 'fuyong').first() # 模糊查詢, 查找用戶名以abc 結尾的全部用戶 users_list = User.query.filter(User.username.endsWith('g')).all() # 查詢用戶名不是 fuyong 的第一個用戶 user = User.query.filter(User.username != 'fuyong').first()
若是上面的例子繼續寫下去的時候,咱們或許會在視圖views中引入models文件以操做數據,在models文件中引入manage文件中的db以定義類和字段,sql
而後在manage文件中引入views文件以註冊藍圖(register_blueprint),這樣就出現了a引入b,b引入c,c引入a的問題,就會報錯,數據庫
解決辦法就是另外建立一個ext.py文件,專門用來建立db,代碼以下:flask
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy()
注意:此時先不講app傳入session
而後在manage.py文件中,導入db,而後初始化,將app傳進去:app
db.init_app(app)
這樣,在視圖中須要用db的以後直接從ext導入,而再也不從manage裏導入 測試