database - 谷歌应用引擎 : Model integrity constraints?

标签 database google-app-engine model gql

我有一个表示电子商务网站中项目的数据存储模型:

class Item(db.Model):
    CSIN = db.IntegerProperty()
    name = db.StringProperty()
    price = db.IntegerProperty()
    quantity = db.IntegerProperty()

有什么方法可以强制执行完整性约束吗?例如,我想确保 quantity 永远不会设置为小于 0。

最佳答案

Property constructor允许您使用“验证器”命名参数指定一个函数。此函数应采用一个参数,即值,如果有效无效则引发异常。例如:

def range_validator(minval, maxval):
  def validator(v):
    if (minval is not None and v < minval) or (maxval is not None and v > maxval):
      raise ValueError("Value %s outside range (%s, %s)" % (v, minval, maxval))
  return validator

class Item(db.Model):
    CSIN = db.IntegerProperty()
    name = db.StringProperty()
    price = db.IntegerProperty()
    quantity = db.IntegerProperty(validator=range_validator(0, None))

请注意,该示例使用嵌套函数来定义通用验证器 - 当然,如果您想编写更特殊用途的验证器,您可以使用简单的函数。

关于database - 谷歌应用引擎 : Model integrity constraints?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2413945/

相关文章:

python - 保存模型尝试创建新对象

php - Codeigniter 模型只是实用程序类?

c# - SQL Server 2000 - 以编程方式限制对数据库所有者的访问?

google-app-engine - 为什么未正确检测到数据存储模拟器的环境变量?

ruby-on-rails - 将用户 ID 链接到配置文件模型 - Ruby on Rails

google-app-engine - 在 AppEngine 中使用较短的属性名称是否被认为是一种好的做法?

javascript - Google-App-Engine channel API : Server doesn't send message to client

mysql - 每个表的 last_update 时间戳?

php - 使用 PHP 显示存储在 mySQL 数据库中的图像

mysql - MySQL 中的链式比较得到意想不到的结果