【发布时间】:2011-12-13 20:58:29
【问题描述】:
后台架构:
class Checkpoint(db.Model):
id = db.Column(db.Integer, primary_key=True)
creator = db.Column(db.Integer, db.ForeignKey('user.id'))
name = db.Column(db.String(255))
description = db.Column(db.String(255), nullable=True)
price = db.Column(db.Float, nullable=True)
expiry = db.Column(db.DateTime, nullable=True)
date_created = db.Column(db.DateTime)
type = db.Column(db.String(255))
image = db.Column(db.String(255))
longitude = db.Column(db.Float)
latitude = db.Column(db.Float)
class UserCheckpoint(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
user = db.relationship("User")
checkpoint_id = db.Column(db.Integer, db.ForeignKey('checkpoint.id'))
checkpoint = db.relationship("Checkpoint")
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(255))
facebook_info = db.Column(db.String(255), db.ForeignKey('facebook_user.id'))
facebook_user = db.relationship("FacebookUser")
class FriendConnection(db.Model):
id = db.Column(db.Integer, primary_key=True)
fb_user_from = db.Column(db.String(255), db.ForeignKey('facebook_user.id'))
fb_user_to = db.Column(db.String(255), db.ForeignKey('facebook_user.id'))
class FacebookUser(db.Model):
id = db.Column(db.String(255), primary_key=True)
name = db.Column(db.String(255))
first_name = db.Column(db.String(255), nullable=True)
middle_name = db.Column(db.String(255), nullable=True)
last_name = db.Column(db.String(255), nullable=True)
gender = db.Column(db.String(255), nullable=True)
username = db.Column(db.String(255), nullable=True)
link = db.Column(db.String(255), nullable=True)
我有一个用户,如您所见,每个用户都有一个 Facebook 个人资料,以及一个描述 Facebook 个人资料间友谊的表格。因此,给定用户,用户将拥有 Facebook 好友列表。我想在给定的检查点条件下获取属于用户或其朋友的所有用户检查点:
coord_conditions = and_(Checkpoint.longitude <= longitude + exp_no,
Checkpoint.longitude >= longitude - exp_no,
Checkpoint.latitude <= latitude + exp_no,
Checkpoint.latitude >= latitude - exp_no,
)
如何使用 SQLAlchemy 中的 ORM 执行此操作?谢谢!
总结:鉴于 user_id 属于朋友/自己的列表,如何选择 UserCheckpoints;而 UserCheckpoint.checkpoint 需要满足一组条件。
【问题讨论】:
-
你不是说
coord_conditions = and_(((longitude - Checkpoint.longitude)**2 + (latitude - Checkpoint.latitude)**2) <= exp_no)吗? -
@bpgergo,也可以这样工作。但我想这无关紧要,因为我想知道如何在 Checkpoint 上选择具有上述条件的 UserCheckpoints,以及作为 Facebook 朋友的用户。
标签: sql sqlalchemy