Python Django datetime主键不';t约束唯一
这是我的模型:Python Django datetime主键不';t约束唯一,python,django,postgresql,django-models,django-south,Python,Django,Postgresql,Django Models,Django South,这是我的模型: class MyModel(models.Model): timestamp = models.DateTimeField(primary_key=True) fielda = models.TextField() 当我调用syncdb时,django没有为postgresql添加时间戳唯一性约束,即使它给了它主键约束 如果我将timestamp更改为justunique=True,django将创建unique约束。但是,如果我将unique=True和pri
class MyModel(models.Model):
timestamp = models.DateTimeField(primary_key=True)
fielda = models.TextField()
当我调用syncdb
时,django没有为postgresql
添加时间戳唯一性约束,即使它给了它主键约束
如果我将timestamp更改为justunique=True
,django将创建unique约束。但是,如果我将unique=True
和primary\u key=True
组合在一起,django不会创建unique约束
我的信息:
- django south v1.8
- django 1.4
- python 2.7
- postgresql 9.1
约束“MyModel\u pkey”主键(“timestamp”)
时运行的代码,而不是仅使用timestamp=models.DateTimeField(PRIMARY\u KEY=True)
当连续运行两次时,它不会引发IntegrityError
。但是,使用unique=True
和notprimary\u key=True
,它确实会提高积分错误
,也许该方法可以为您的问题带来一些启发
从技术上讲,主键约束只是
唯一约束和非空约束。那么下面两个呢,
表定义接受相同的数据:
CREATE TABLE products (
product_no integer UNIQUE NOT NULL,
name text,
price numeric );
CREATE TABLE products (
product_no integer PRIMARY KEY,
name text,
price numeric );
[…]主键表示可以删除一列或一组列
用作表[…]中行的唯一标识符添加
主键将自动在上创建唯一的btree索引
主键中使用的列或列组。[……]
将我与解释我问题的同一个问题(已回答)联系起来
主键是否总是意味着唯一的约束?您不能有重复的主键。对我来说,这不是问题:您的数据库在字段“timestamp”上有约束“primary KEY”,您不需要在同一字段上有额外的约束“UNIQUE”,主键约束就可以完成任务。例如,如果您查看其他表,Django生成的自动“id”字段作为主键没有“唯一”约束。我编辑了有关您的注释的问题。您确定它是相同的时间戳吗?是否精确到微秒,因为如果不是,它当然不是唯一的。我再次编辑了这个问题。
CREATE TABLE products (
product_no integer UNIQUE NOT NULL,
name text,
price numeric );
CREATE TABLE products (
product_no integer PRIMARY KEY,
name text,
price numeric );