Flask 学习笔记
一、Flask-SQLAlchemy
1.1、简介
另外一个框架,叫做 Flask-SQLAlchemy ,它是对 SQLAlchemy 进行了一个简单的封装,使得我们在 flask 中使用 sqlalchemy 更加的简单。可以通过 pip install flask-sqlalchemy
。
1.2、数据库初始化
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
HOSTNAME = '127.0.0.1'
DATABASE = 'demo0427'
PORT = 3306
USERNAME = 'root'
PASSWORD = 'root'
DB_URL = 'mysql+mysqlconnector://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
app = Flask(__name__)
# engine = create_engine(DB_URL)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 相当于建立了连接
db = SQLAlchemy(app)
1.3、ORM 类
之前都是通过 Base = declarative_base()
来初始化一个基类,然后再继承。在 Flask-SQLAlchemy 中更加简单了
# 继承的不再是 Base, 而是 db.Model
class User(db.Model):
# 如果不写 __tablename__ 会以模型名字(即类名)的小写来定义表名
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(50))
# 这里用 __repr__ 打印
def __repr__(self):
return "User(name:%s)" % self.name
class Artcile(db.Model):
__tablename__ = 'article'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(50))
uid = db.Column(db.Integer, db.ForeignKey('users.id'))
author = db.relationship('User', backref='articles')
1.4、映射模型到数据库表
使用 Flask-SQLAlchemy 所有的类都是继承自 db.Model
,并且所有的 Column 和数据类型也都成为 db
的一个属性。但是有个好处是不用写表名了,Flask-SQLAlchemy 会自动将类名小写化,然后映射成表名。
# 把模型映射到数据库中
db.create_all()
1.5、添加数据
# 添加数据 大致相同
lis_user = []
for i in range(5):
user = User(name=f'laowang{i}')
article = Artcile(title=f'Python{i}')
article.author = user
lis_user.append(article)
db.session.add_all(lis_user)
db.session.commit()
1.6、查询数据
# 查询数据
user = User.query.all()
print(user)
users = User.query.order_by(User.id.desc()).all()
print(users)
# 当然 session.query(User).all() 也还是可以使用的
user2 = db.session.query(User).all()
print(user2)
1.7、删除数据
# 删除
user = User.query.filter(User.name == 'laowang1').first()
print(user)
db.session.delete(user)
db.session.commit()
user = User.query.all()
print(user)