python - SQLAlchemy:检查两列之一的任何约束不为空?

标签 python postgresql sqlalchemy flask-sqlalchemy

这可能是完全愚蠢的问题,但我在我的模型中有这样的要求,其中至少 categoryparent_categorynot null

我的模型看起来像

class BudgetCategories(db.Model):
    __tablename__ = 'budget_categories'
    uuid = Column('uuid', GUID(), default=uuid.uuid4, primary_key=True,
                  unique=True)
    budget_id = Column(GUID(), ForeignKey('budgets.uuid'), nullable=False)
    budget = relationship('Budget', backref='budgetCategories')
    category = Column('category', sa.types.String, nullable=True)
    parent_category = Column('parent_category', sa.types.String, nullable=True)
    amount = Column('amount', Numeric(10, 2), nullable=False)
    recurring = Column('recurring', sa.types.Boolean,
                       nullable=False)
    created_on = Column('created_on', sa.types.DateTime(timezone=True),
                        nullable=False)

我该如何指定。我什至不知道该尝试什么

感谢任何指点

我正在使用 PostgreSQL 作为后端数据库

最佳答案

我不是 100% 确定 PostgreSQL 语法,但是在添加到您的 BudgetCategories 模型之后应该使用 CheckConstraint 来解决问题:

class BudgetCategories(Base):
    __tablename__ = 'budget_categories'
    # ...

    # @note: new
    __table_args__ = (
            CheckConstraint('NOT(category IS NULL AND parent_category IS NULL)'),
            )

关于python - SQLAlchemy:检查两列之一的任何约束不为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20943777/

相关文章:

python - 如何在 EPD 中升级 scipy 或 numpy?

python - Scipy值错误: Total size of new array must be unchanged

sql - 有没有办法让 postgresql 报告连接的结果?

django - 强制对 Django 模型进行级联删除

python - 在 SQLAlchemy 中访问连接查询结果

python - 覆盖 SQL Alchemy ORM 过滤条件

python - 快速简便的方法来检查字典中的所有项目是否都是空字符串?

python - 如何从图像中提取虚线文本?

windows - 使用 psql 工具恢复转储的奇怪 Windows 提示行为

python - Flask SQLAlchemy 的表(模型)继承