具有属性约束(如必需/可选)的Python ORMs?

具有属性约束(如必需/可选)的Python ORMs?,python,django,orm,sqlalchemy,peewee,Python,Django,Orm,Sqlalchemy,Peewee,以下是小马ORM可以做的: class Business(db.Entity): name = Required(str) latitude = Optional(float, py_check=lambda val: -90 <= val <= 90) longitude = Optional(float, py_check=lambda val: -180 <= val <= 180) 类别业务(数据库实体): 名称=

以下是小马ORM可以做的:

class Business(db.Entity):
    name        = Required(str)
    latitude    = Optional(float, py_check=lambda val: -90 <= val <= 90)
    longitude   = Optional(float, py_check=lambda val: -180 <= val <= 180)
类别业务(数据库实体):
名称=必需(str)

latitude=Optional(float,py_check=lambda val:-90我也不确定您是否希望在非Django应用程序中使用Djano ORM,但请注意,您可以使用Django的内置功能:

from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator

class Business(models.Model):
    name = models.TextField()
    latitude = models.FloatField(null=True, blank=True,
                                 validators=[MinValueValidator(-90), MaxValueValidator(90)])
    longitude = models.FloatField(null=True, blank=True,
                                  validators=[MinValueValidator(-180), MaxValueValidator(180)])
使用:

  • 通过设置
    nullable=False/True
  • 验证是使用
下面的代码使用,但纯sqlalchemy代码几乎相同:

class Business(db.Model):
    __tablename__ = 'business'
    id = db.Column(db.Integer, primary_key=True)

    name = db.Column(db.String, nullable=False)
    latitude = db.Column(db.Float, nullable=True)
    longitude = db.Column(db.Float, nullable=True)

    @db.validates('latitude')
    def validate_lat(self, key, value):
        assert value is None or (-90 <= value <= 90)
        return value

    @db.validates('longitude')
    def validate_lon(self, key, value):
        assert value is None or (-180 <= value <= 180)
        return value
类业务(db.Model):
__tablename_uuu=‘业务’
id=db.Column(db.Integer,主键=True)
name=db.Column(db.String,null=False)
纬度=db.Column(db.Float,nullable=True)
经度=db.Column(db.Float,nullable=True)
@db.validates('纬度')
def validate_lat(自身、键、值):

assert value为None或(-90Peewee不支持将验证器作为ORM的一部分,但是您可以使用
Field.null
来指示字段是否需要有值