Connect Flask to a database via SQLAlchemy. Define models, run migrations with Flask-Migrate, and perform CRUD operations.
pip install flask-sqlalchemy flask-migratefrom flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
migrate = Migrate(app, db)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
posts = db.relationship('Post', backref='author', lazy=True)
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(200), nullable=False)
body = db.Column(db.Text, nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)flask db init
flask db migrate -m 'initial'
flask db upgrade# CREATE
new_post = Post(title='Hello', body='World', user_id=1)
db.session.add(new_post)
db.session.commit()
# READ
posts = Post.query.all()
post = Post.query.get_or_404(post_id)
posts = Post.query.filter_by(user_id=1).order_by(Post.id.desc()).all()
# UPDATE
post.title = 'New Title'
db.session.commit()
# DELETE
db.session.delete(post)
db.session.commit()db = SQLAlchemy(app) and model classes that extend db.Model. Fields are class attributes.flask db migrate + flask db upgrade — run every time you change a model.db.session.add(obj) + db.session.commit() to save. db.session.delete(obj) to remove.db.ForeignKey on the child + db.relationship on the parent for easy traversal.