Semua Tentang Flask dan Flask-SQLAclhemy - @kholidfu
Table of Contents
1 Relationship
1.1 Many-to-many
Sebagai ilustrasi, kita memiliki 2 tabel, post dan tag. Tiap
post memiliki banyak tags, dan tiap tag memiliki banyak
post. Berikut isi dari berkas app.py:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
# create flask app
app = Flask(__name__)
# flask-sqlalchemy settings
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///dbasefile.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
# init flask-sqlalchemy
db = SQLAlchemy(app)
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String)
content = db.Column(db.Text)
# tags many-to-many relationship
tags = db.relationship('Tag', secondary=post_tag, backref='tags')
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
post_tag = db.Table('post_tag',
db.Column('post_id', db.Integer, db.ForeignKey('tag.id')),
db.Column('tag_id', db.Integer, db.ForeignKey('post.id')))
Untuk dapat membuat many-to-many relationship, kita membutuhkan satu
tabel association, yang pada kasus ini kita namakan dengan tabel post_tag.
Tabel ini berisi asosiasi antara post.id dengan tag.id.
Mari kita masuk ke python interpreter dan memasukkan perintah untuk membuat tabel.
>>> from app import db >>> from app import Post, Tag >>> db.create_all()
Selanjutnya mari kita coba memasukkan dummy data:
>>> p = Post() >>> p.title = 'title' >>> p.content = 'content' >>> db.session.add(p) >>> db.session.commit() >>> post = Post.query.first() >>> t = Tag() >>> t.name = 'tag' >>> post.tags.append(t) >>> db.session.add(post) >>> db.session.commit()
Contoh query data:
>>> tags = Post.query.first().tags
Contoh delete data:
>>> Post.query.first().tags = [] >>> db.session.commit()