gpt4 book ai didi

python - 使用 SQLAlchemy 定义 PostgreSQL 字符串列的最小长度

转载 作者:太空宇宙 更新时间:2023-11-03 15:45:28 27 4
gpt4 key购买 nike

我正在使用 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 一个最小长度,或者只是禁止它成为空字符串。我该怎么做?

最佳答案

理想情况下,我们希望通过约束在数据库层应用验证,并在我们的模型中拒绝尝试将属性设置为太短的字符串,甚至在尝试保存它之前到数据库。我们可以用 CheckConstraint 做前者使用 char_length功能,后者通过添加 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

关于python - 使用 SQLAlchemy 定义 PostgreSQL 字符串列的最小长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50174325/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com