【问题标题】:Define minimum length for PostgreSQL string column with SQLAlchemy使用 SQLAlchemy 定义 PostgreSQL 字符串列的最小长度
【发布时间】:2018-10-14 21:44:25
【问题描述】:

我正在使用 SQLAlchemy 声明性基础定义一个 PostgreSQL 表,如下所示:

from sqlalchemy import Column, String, BigInteger
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

class MyTable(Base):
    __tablename__ = 'my_table'
    id = Column('id', BigInteger, primary_key=True)
    some_string = Column('some_string', String(256), nullable=False)

nullable 约束保证some_string 不能是null。但是,我还想给some_string 一个最小长度,或者只是禁止它成为空字符串。我该怎么做?

【问题讨论】:

    标签: python postgresql sqlalchemy


    【解决方案1】:

    理想情况下,我们希望通过约束在数据库层应用验证,并且在我们的模型中通过拒绝尝试将属性设置为太短的字符串,甚至在尝试保存它之前到数据库。我们可以使用char_length 函数通过CheckConstraint 来实现前者,而通过添加validator 来实现后者。下面是一个示例,它在 some_string 上强制要求最少 3 个字符:

    from sqlalchemy import Column, String, BigInteger
    from sqlalchemy.schema import CheckConstraint
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy.orm import validates
    Base = declarative_base()
    
    class MyTable(Base):
        __tablename__ = 'my_table'
        id = Column('id', BigInteger, primary_key=True)
        some_string = Column('some_string', String(256), nullable=False)
    
        __table_args__ = (
            CheckConstraint('char_length(some_string) > 2',
                            name='some_string_min_length'),
        )
    
        @validates('some_string')
        def validate_some_string(self, key, some_string) -> str:
            if len(some_string) <= 2:
                raise ValueError('some_string too short')
            return some_string
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      • 2014-07-22
      • 1970-01-01
      • 2013-07-28
      相关资源
      最近更新 更多