Python 具有属性约束(例如必需/可选)的 ORM?
Python ORMs with attribute constraints such as required / optional?
Pony 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)
我正在尝试确定其他任何工具(SQLAlchemy、SQLObject 等)是否可以执行此操作。特别是那些可以用作框架中的库的。 (所以,我不确定在非 Django 应用程序中使用 Django ORM 需要做多少工作。)
我很难在各种文档中找到此功能,但我确信他们支持它。
所以我的问题是:这些(或其他)ORM 是否支持必需属性和可选属性和验证?如果可以,怎么做?
- SQLAlchemy
- SQLObject
- 风暴
- Django
- 皮威
我也不确定你是否想在非 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)])
使用SQLAlchemy:是
- Required/Optional 通过设置
nullable = False/True
完成
- 使用 Simple Validators
完成验证
下面的代码使用Flask,但是纯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
正如@kevin-christopher-henry 已经指出的那样,将 Django ORM 与非 Django 框架一起使用几乎没有意义,反之亦然:如果使用 Django,则意义重大 更容易坚持使用 Django ORM。
Peewee 不支持将验证器作为 ORM 的一部分,但是您可以使用 Field.null
来指示字段是否需要具有值。
Pony 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)
我正在尝试确定其他任何工具(SQLAlchemy、SQLObject 等)是否可以执行此操作。特别是那些可以用作框架中的库的。 (所以,我不确定在非 Django 应用程序中使用 Django ORM 需要做多少工作。)
我很难在各种文档中找到此功能,但我确信他们支持它。
所以我的问题是:这些(或其他)ORM 是否支持必需属性和可选属性和验证?如果可以,怎么做?
- SQLAlchemy
- SQLObject
- 风暴
- Django
- 皮威
我也不确定你是否想在非 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)])
使用SQLAlchemy:是
- Required/Optional 通过设置
nullable = False/True
完成
- 使用 Simple Validators 完成验证
下面的代码使用Flask,但是纯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
正如@kevin-christopher-henry 已经指出的那样,将 Django ORM 与非 Django 框架一起使用几乎没有意义,反之亦然:如果使用 Django,则意义重大 更容易坚持使用 Django ORM。
Peewee 不支持将验证器作为 ORM 的一部分,但是您可以使用 Field.null
来指示字段是否需要具有值。