如何在Django中执行此数据库模型?

时间:2010-03-31 00:28:02

标签: python mysql database django

Django目前不支持MySQL中的“Point”数据类型。这就是我创建自己的原因。

class PointField(models.Field):
    def db_type(self):
        return 'Point'

class Tag(models.Model):
    user = models.ForeignKey(User)
    utm = PointField()

正如您所看到的,这很有效,syncdb可以很好地创建模型。

但是,我当前的代码使用原始SQL计算两个点之间的长度。

cursor.execute("SELECT user_id FROM life_tag WHERE\
              (GLength(LineStringFromWKB(LineString(asbinary(utm), asbinary(PointFromWKB(point(%s, %s)))))) < 55)...

这表示:选择给定点与表格点之间的长度小于55的位置。

如何使用Django而不是RAW SQL执行此操作?我不想再做游标和SELECT语句了。如何修改models.py才能执行此操作?

1 个答案:

答案 0 :(得分:0)

你的问题有点不清楚 - 你刚才问如何计算2点之间的距离?或者您希望ORM能为您提供一些功能吗?

如果是后者,那么没有一些外部援助就不会发生这种情况;几何和地理超出了大多数典型数据库映射系统的范围。您始终可以使用自动映射来检索您感兴趣的属性,并使用毕达哥拉斯或其他任何方法手动比较它们;那里没有SQL。

关于我提到的“外部援助”,您可以查看GeoDjango,这可能对您有用。 (对于有类似问题但没有将Django用于ORM的人也有GeoAlchemy。)