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()

Date: <2016-11-12 Sat>

Author: Kholid Fuadi

Created: 2016-11-12 Sat 23:02

Emacs 25.1.1 (Org mode 8.2.10)

Validate