栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何验证SQLAlchemy ORM中的列数据类型?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何验证SQLAlchemy ORM中的列数据类型?

SQLAlchemy没有内置此功能,因为它符合DBAPI /数据库的要求,是最佳和最有效的验证和强制值来源。

为了构建自己的验证,通常使用TypeDecorator或ORM级验证。TypeDecorator的优点是它在核心运行,并且非常透明,尽管它仅在实际发出SQL时发生。

为了尽早进行验证和强制,这是在ORM级别上。

可以在ORM层通过

@validates
以下方式进行临时验证:

http://docs.sqlalchemy.org/en/latest/orm/mapped_attributes.html#simple-
validators

@validates使用的事件系统也可以直接使用。您可以编写一个通用的解决方案,将您选择的验证器链接到要映射的类型:

from sqlalchemy import Column, Integer, String, DateTimefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import eventimport datetimebase= declarative_base()def validate_int(value):    if isinstance(value, basestring):        value = int(value)    else:        assert isinstance(value, int)    return valuedef validate_string(value):    assert isinstance(value, basestring)    return valuedef validate_datetime(value):    assert isinstance(value, datetime.datetime)    return valuevalidators = {    Integer:validate_int,    String:validate_string,    DateTime:validate_datetime,}# this event is called whenever an attribute# on a class is instrumented@event.listens_for(base, 'attribute_instrument')def configure_listener(class_, key, inst):    if not hasattr(inst.property, 'columns'):        return    # this event is called whenever a "set"     # occurs on that instrumented attribute    @event.listens_for(inst, "set", retval=True)    def set_(instance, value, oldvalue, initiator):        validator = validators.get(inst.property.columns[0].type.__class__)        if validator: return validator(value)        else: return valueclass MyObject(base):    __tablename__ = 'mytable'    id = Column(Integer, primary_key=True)    svalue = Column(String)    ivalue = Column(Integer)    dvalue = Column(DateTime)m = MyObject()m.svalue = "ASdf"m.ivalue = "45"m.dvalue = "not a date"

验证和强制也可以使用TypeDecorator在类型级别上构建,尽管仅当发出SQL时才如此,例如本示例将utf-8字符串强制为unipre:

http://docs.sqlalchemy.org/zh_CN/latest/core/custom_types.html#coercing-
enpred-strings-to-
unipre



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637738.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号