CqlEngine模型primary_key没有引发Unique Error

时间:2017-12-26 08:26:47

标签: flask cassandra-3.0 cqlengine

我在烧瓶项目中使用CassandraDB

我创建了一个用户模型,其中包含电子邮件作为primary_key。

class User(Model):
    __table_name__ = 'user'

    user_id = UUID(primary_key=True)
    email = Text(max_length=120, primary_key=True)
    first_name = Text()
    last_name = Text()

python代码:

user_data = {'email': 'john@example.com', "first_name":'John', "last_name":'Doe'}
user = User(**user_data)
user.save()

以上代码正确地根据需要创建用户

user_data = {'email': 'john@example.com', "first_name":'Johnny', "last_name":'Daves'}
user = User(**user_data)
user.save()

现在上面的代码将现有的用户'john doe'更新为'johnny daves'。我期待得到的是cqlengine引发的错误,声称“用户已经存在电子邮件john@example.com”

为什么不引发错误?我做错了吗?

1 个答案:

答案 0 :(得分:0)

我设法找出答案,在完成代码之后我能够注意到Model类有一个名为_if_not_exists = False的属性,如果设置将会引发LWTException,表明该对象已经存在于数据库,你无法创建它。

class User(Model):
    __table_name__ = 'user'
    _if_not_exists = True  

    user_id = UUID(primary_key=True)
    email = Text(max_length=120, primary_key=True)
    first_name = Text()
    last_name = Text()

如上图所示,在模型中设置_if_not_exists = True解决了我的问题:)