我们之前学习了SQLAlchemy的用法,但是最终我们还需要把SQLAlchemy运用到flask中,这时候我们就需要用到flask的SQLAlchemy插件Flask-SQLAlchemy,Flask-SQLAlchemy是对SQLAlchemy进行了一个简单的封装,使得我们在flask中使用sqlalchemy更加的简单。可以通过pip install flask-sqlalchemy。
使用
数据库初始化:数据库初始化不再是通过create_engine
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
HOSTNAME = '127.0.0.1'
DATABASE = 'demo0422'
PORT = 3306
USERNAME = 'root'
PASSWORD = 'root'
DB_URL = 'mysql+mysqlconnector://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
ORM类:之前都是通过Base = declarative_base()来初始化一个基类,然后再继承,在Flask-SQLAlchemy中更加简单了,我们通过继承db.Model的类即可
class User(db.Model):
id = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(80),unique=True)
email = db.Column(db.String(120),unique=True)
def __repr__(self):
return f'User {self.username}'
映射模型到数据库表:使用Flask-SQLAlchemy所有的类都是继承自db.Model,并且所有的Column和数据类型也都成为db的一个属性。但是有个好处是不用写表名了,Flask-SQLAlchemy会自动将类名小写化,然后映射成表名。当然如果我们想自己取个表面也同样还可以使用__tablename__=的方法
写完类模型后,要将模型映射到数据库的表中,使用以下代码创建所有的表
db.create_all()
添加数据:这时候就可以在数据库中看到已经生成了一个user表了。
user1 = User('admin','xxxx@qq.com')
user2 = User('guest','xxx@qq.com')
db.session.add(admin)
db.session.add(guest)
db.session.commit()
添加数据和之前的没有区别,只是session成为了一个db的属性。
查询数据:查询数据不再是之前的session.query了,而是将query属性放在了db.Model上,所以查询就是通过Model.query的方式进行查询了
users = User.query.all()
删除数据:删除数据跟添加数据类似,只不过session是db的一个属性而已:
db.session.delete(user2)
db.session.commit()