安裝
pip3 install Flask-SQLAlchemy
測試環境目錄結構
配置
settings.py
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
連接
manage.py
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy(app)
建表
models.py
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')) db.create_all()
然后直接右鍵運行models.py即可創建表
操作
增
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以定義類和字段,
然后在manage文件中引入views文件以注冊藍圖(register_blueprint),這樣就出現了a引入b,b引入c,c引入a的問題,就會報錯,
解決辦法就是另外創建一個ext.py文件,專門用來創建db,代碼如下:
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy()
注意:此時先不講app傳入
然后在manage.py文件中,導入db,然后初始化,將app傳進去:
db.init_app(app)
這樣,在視圖中需要用db的之后直接從ext導入,而不再從manage里導入