变量名中可以有冒号吗?我已经试过反斜杠了,但是不起作用...
我使用geoDjango,因此我的模型中的标识符必须与数据库中的标识符保持相同的名称。问题是,当我从OSM迁移数据时,我有一些列是用冒号命名的(例如,addr:housenumber)
下面是一个例子:
class myClass(models.Model):
# ...
addr:housename = models.TextField(blank=True)当我尝试同步数据库时:
addr:housename = models.TextField(blank=True)
^
SyntaxError: invalid syntax这看起来很正常。当我试图转义冒号时,我遇到了另一个错误:
addr\:housename = models.TextField(blank=True)
^
SyntaxError: unexpected character after line continuation character我真的不明白为什么我会得到这个错误。
有人知道如何在标识符中放入列吗?
发布于 2013-05-06 17:04:42
使用db_column字段参数指定实际的列名。是的,在python的标识符名中不允许使用冒号。
class myClass(models.Model):
addr_housename = models.TextField(blank=True, db_column="addr:housename")发布于 2013-05-06 17:05:24
简单地说,在Python变量名中不允许使用冒号。只能包含字母、数字和下划线。实际上,如果可能的话,您应该用下划线替换所有的冒号。
如果你的变量是类属性-这里似乎不是这样的,你可以使用setattr和getattr来拥有你想要的带有不同字符的类属性名,但是这将是丑陋的,没有setattr和getattr你将不能再使用它们。下面是一个示例:
class A: pass
a = A()
setattr(a, 'addr:housename', models.TextField(blank=True))
some_var = getattr(a, 'addr:housename')发布于 2013-05-06 17:08:38
为什么不定义多个模型并通过外键链接它们,就像在实体关系模型中应该做的那样:
class Address(models.Model)
housename = models.TextField(blank=True)
...
class myClass(models.Model):
address = models.ForeignKey('Address')
...https://stackoverflow.com/questions/16395227
复制相似问题