【发布时间】:2012-07-02 07:43:24
【问题描述】:
我有一个具有以下结构的 MySQL 数据库,希望有人可以帮助我将下面的 SQL 查询转换为 SQLAlchemy。
数据库结构:
**bottom:**
id
name
middle_id
**middle:**
id
name
top_id
**top:**
id
name
这是我的模型:
class Bottom(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
middle_id = db.Column(db.Integer, db.ForeignKey('middle.id'))
middle = db.relationship('Middle',
backref=db.backref('bottoms', lazy='dynamic'))
class Middle(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
top_id = db.Column(db.Integer, db.ForeignKey('top.id'))
top = db.relationship('Top',
backref=db.backref('middles', lazy='dynamic'))
class Top(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
这是我要转换为 SQLAlchemy 的 SQL:
SELECT
b.*,
m.*,
t.*
FROM bottom AS b
LEFT JOIN (SELECT id, name, top_id from middle) AS m on m.id = b.middle_id
LEFT JOIN (SELECT id, name FROM top) AS t on t.id = m.top_id
WHERE b.name LIKE '%query%' OR m.name LIKE '%query%' OR t.name LIKE '%query%'
bottom表中的每一项都与middle相关,middle表中的每一项都与top相关>。我想查询数据库以查找 bottom 中名为 LIKE %query% 的所有条目,以及 bottom 中名为 LIKE %query 的所有条目的条目%,以及 bottom 中所有条目的条目,其中中间顶部的名称为 LIKE query。
我想把它转换成这样的 SQLAlchemy:
return db.session.query(Bottom).filter( or_(Bottom.name.like('%query%'),
Bottom.middle.name.like('%query%'),
Bottom.middle.top.name.like('%query%'))
)).all()
换句话说,如果我在 Bottom 中有一个与 Middle 中的条目相关的条目,并且 Middle 中的条目与 Top 中的条目相关,如果我在 Top 中搜索适当的名称,它不会返回与它相关的中间条目,但与相关中间条目相关的底部条目。
这是一个例子:
数据:
**bottom**
id 1
name "Gus Fring"
middle_id 1
**middle**
id 1
name "Jesse Pinkman"
top_id 1
**top**
id 1
name "Walter White"
如果我搜索“Walter White”,它不会返回中间关系 (Jesse Pinkman),而是返回底部关系到中间关系的结果 (Gus Fring)。
提前谢谢你:)。
【问题讨论】:
-
@manurajhada 你不清楚什么?我没有提供哪些细节会有所帮助?
-
@manurajhada 我已经更新了一点,不知道现在是否更清楚了。
标签: mysql sql sqlalchemy flask flask-sqlalchemy