- 関連テーブルを介したクエリ: 多対多の関係を持つ2つのテーブルがあり、それらを関連テーブルで結び付けている場合、関連テーブルを介してデータをクエリすることができます。以下は、例として「Users」と「Groups」という2つのテーブルがあり、それらを「UserGroups」という関連テーブルで結び付けている場合のコード例です。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'your_database_uri'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100))
class Group(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100))
user_groups = db.Table('user_groups',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('group_id', db.Integer, db.ForeignKey('group.id'))
)
class UserGroup(db.Model):
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True)
group_id = db.Column(db.Integer, db.ForeignKey('group.id'), primary_key=True)
user = db.relationship('User', backref=db.backref('user_groups', cascade='all, delete-orphan'))
group = db.relationship('Group', backref=db.backref('user_groups', cascade='all, delete-orphan'))
# 特定のユーザーに関連するグループをクエリする例
user = User.query.get(user_id)
groups = user.user_groups
# 特定のグループに関連するユーザーをクエリする例
group = Group.query.get(group_id)
users = group.user_groups
- JOINを使用したクエリ: 関連テーブルを使用せずにJOINを直接利用する方法もあります。以下は、JOINを使用して多対多の関係を持つテーブルをクエリする例です。
# 特定のユーザーに関連するグループをクエリする例
user = User.query.join(UserGroup).join(Group).filter(User.id == user_id).all()
groups = [ug.group for ug in user]
# 特定のグループに関連するユーザーをクエリする例
group = Group.query.join(UserGroup).join(User).filter(Group.id == group_id).all()
users = [ug.user for ug in group]
上記のコード例では、関連テーブルやJOINを使用して多対多の関係を持つデータをクエリする方法を示しています。これらの例はあくまで参考として提供されており、データモデルや関連するテーブルの構造に合わせて適宜変更してください。