Python 2.7 友谊模型:如何发现友谊是否存在?
我有下面的型号Python 2.7 友谊模型:如何发现友谊是否存在?,python-2.7,google-app-engine,model,Python 2.7,Google App Engine,Model,我有下面的型号 class User(db.Model): name = db.StringProperty(require=True) class Friendship(db.Model): user1 = db.ReferenceProperty(User, collection_name='user1_set') user2 = db.ReferenceProperty(User, collection_name='user2_set') 我可以建立朋友和友谊。
class User(db.Model):
name = db.StringProperty(require=True)
class Friendship(db.Model):
user1 = db.ReferenceProperty(User, collection_name='user1_set')
user2 = db.ReferenceProperty(User, collection_name='user2_set')
我可以建立朋友和友谊。
但是如何检查友谊是否存在呢?
有没有更好的方法来建立友谊模型?这会很好,但你需要具体说明如何定义友谊。考虑以下用户:
a = User(name='a')
a.put()
b = User(name='b')
b.put()
您可以为每个友谊创建两个友谊
条目,并查询其中一个以检查友谊是否存在
f = Friendship(user1=a, user2=b)
f.put()
f = Friendship(user1=b, user2=a)
f.put()
result = db.GqlQuery("SELECT * FROM Friendship WHERE user1 = :1 AND user2 = :2", a, b).get()
或者,您可以创建一个友谊
,并在每次要检查关系是否存在时执行两个查询:
f = Friendship(user1=a, user2=b)
f.put()
result = db.GqlQuery("SELECT * FROM Friendship WHERE user1 = :1 AND user2 = :2", a, b).get()
if result is None:
result = db.GqlQuery("SELECT * FROM Friendship WHERE user1 = :1 AND user2 = :2", b, a).get()
或者,您可以制定一条规则,规定定义友谊的顺序(例如要求字母顺序较低的名称优先):
最后一个选项是最有效的,假设您的排序并不复杂,但您需要担心边缘情况(例如,两个名为John Smith的用户)。将名称加上一些其他属性(例如用户注册时)进行散列,然后对其进行比较,将减少但不能防止出现这种情况的可能性。将好友设置为ListProperty:
class Friendship(db.Model):
friends = db.ListProperty(db.Key) # db.Key refers to a user
然后是一个简单的查询,以查找两个用户之间的友谊:
def getFriendship(self, userKey1, userKey2):
query = Friendship.gql("WHERE friends = :1 AND friends = :2", userKey1, userKey2)
return query.get()
def getFriendship(self, userKey1, userKey2):
query = Friendship.gql("WHERE friends = :1 AND friends = :2", userKey1, userKey2)
return query.get()