Flask開發之數據庫(SQLAlchemy)的配置以及增刪改查


前言:SQLAlchemy是一個關係型數據庫框架,它提供了高層的ORM和底層的原生數據庫的操作。flask-sqlalchemy是一個簡化了SQLAlchemy操作的flask擴展。


1.在Flask中配置SQLAlchemy

1 安裝flask-sqlalchemy

pip install flask-sqlalchemy

2 安裝flask-mysqldb

pip install flask-mysqldb

3 在代碼中的配置:

class Config(object):
    """配置參數"""
    # sqlalchemy的配置參數
    SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]:3306/flask_demo"
    # 設置sqlalchemy自動更跟蹤數據庫
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # 設置每次請求結束後會自動提交數據庫中的改動
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    # 查詢時會顯示原始SQL語句
    SQLALCHEMY_ECHO = True

app.config.from_object(Config)
db = SQLAlchemy(app)

2.常用的SQLAlchemy字段類型

在這裏插入圖片描述

3.常用的SQLAlchemy列選項

在這裏插入圖片描述

4.常用的SQLAlchemy關係選項

在這裏插入圖片描述

5.在視圖函數中定義模型類

注意:需要在命令行操作

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

class Config(object):
    """配置參數"""
    # sqlalchemy的配置參數
    SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]:3306/flask_demo"
    # 設置sqlalchemy自動更跟蹤數據庫
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # 設置每次請求結束後會自動提交數據庫中的改動
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    # 查詢時會顯示原始SQL語句
    SQLALCHEMY_ECHO = True

app.config.from_object(Config)
db = SQLAlchemy(app)

# 定義數據庫的模型
class Author(db.Model):
    """作者"""
    __tablename__ = "author"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32), unique=True)
    books = db.relationship("Book", backref="author")

class Book(db.Model):
    """書籍"""
    __tablename__ = "book"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    author_id = db.Column(db.Integer, db.ForeignKey("author.id"))

if __name__ == '__main__':
    db.drop_all() #第一次執行的時候操作
    db.create_all()#創建表
    # app.run(debug=True)

6.數據庫的增刪改查

1 常用的SQLAlchemy查詢過濾器

在這裏插入圖片描述

2.常用的SQLAlchemy查詢執行器

在這裏插入圖片描述

3 插入一條或者多條數據

def add_one():
    """添加單個數據"""
    user1 = Author(name="fly1")
    db.session.add(user1)
    db.session.commit()

    bk_user1 = Book(name='fly自傳', author_id=user1.id)
    db.session.add(bk_user1)
    db.session.commit()

def add_many():
    """添加多個數據"""
    au_xi = Author(name='我喫西紅柿')
    au_qian = Author(name='蕭潛')
    au_san = Author(name='唐家三少')
    db.session.add_all([au_xi, au_qian, au_san])
    db.session.commit()

    bk_xi = Book(name='吞噬星空', author_id=au_xi.id)
    bk_xi2 = Book(name='寸芒', author_id=au_qian.id)
    bk_qian = Book(name='飄渺之旅', author_id=au_qian.id)
    bk_san = Book(name='冰火魔廚', author_id=au_san.id)
    db.session.add_all([bk_xi, bk_xi2, bk_qian, bk_san])
    db.session.commit()

4.刪除數據

def delete():
    """刪除數據"""
    author = Author.query.filter_by(name="唐家三少").first()
    db.session.delete(author)
    db.session.commit()

5.修改數據

def update():
    """更新數據"""
    book = Book.query.filter_by(name="吞噬星空").first()
    book.name = '吞噬星空2'
    db.session.commit()

    Author.query.filter_by(name='zhang').update({'name': 'li'})
    pass

6.查詢數據

def query():
    """查詢數據"""
    # r1 = Book.query.all() #查詢所有
    # r2 = Book.query.filter_by(name="吞噬星空").all() #根據條件查詢
    r3 = Book.query.filter_by(name="吞噬星空").first()  # 根據條件查詢 第一個
    # r4 = Book.query.first() #查詢第一個
    # r5 = Book.query.filter(Author.name.endswith('g')).all() #模糊查詢
    print(r3)
    print(type(r3))

7.數據庫遷移

在開發過程中,需要修改數據庫模型,這樣就可以使用Flask-Migrate來進行數據的遷移。

1 安裝Flask-Migrate和flask_script

pip install flask-migrate

pip install flask_script

2 添加遷移代碼

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate,MigrateCommand
from flask_script import Shell,Manager


app = Flask(__name__)

manager = Manager(app)

class Config(object):
    """配置參數"""
    # sqlalchemy的配置參數
    SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]:3306/flask_demo"
    # 設置sqlalchemy自動更跟蹤數據庫
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # 設置每次請求結束後會自動提交數據庫中的改動
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    # 查詢時會顯示原始SQL語句
    SQLALCHEMY_ECHO = True

app.config.from_object(Config)
db = SQLAlchemy(app)

#第一個參數是Flask的實例,第二個參數是Sqlalchemy數據庫實例
migrate = Migrate(app,db)

#manager是Flask-Script的實例,這條語句在flask-Script中添加一個db命令
manager.add_command('db',MigrateCommand)

# 定義數據庫的模型
class Author(db.Model):
    """作者"""
    __tablename__ = "author"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32), unique=True)
    books = db.relationship("Book", backref="author")

class Book(db.Model):
    """書籍"""
    __tablename__ = "book"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    author_id = db.Column(db.Integer, db.ForeignKey("author.id"))


if __name__ == '__main__':
    manager.run()

3 創建遷移倉庫

python app.py db init

4 創建遷移腳本

python app.py db migrate -m ‘initial migration’

5 更新數據庫

python app.py db upgrade

6 回退數據庫

python database.py db downgrade 版本號


結束!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章