You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLAlchemy模型唯一约束中func.md5()写法不生效问题咨询

原因说明

UniqueConstraint 仅接收表中实际存在的列名作为参数,不支持直接传入func.md5(col2)这类SQL函数表达式,因此你原先的写法无法生成预期的基于MD5值的联合唯一索引。

正确实现方式

基于函数表达式的唯一索引需要通过Index构造实现,给Index传入unique=True参数即可达到联合唯一约束的效果,Index原生支持将SQL函数计算结果作为索引字段,修正后的代码如下:

from sqlalchemy import func, Index

class TestClass(db.Model):
    __tablename__ = 'my_table'
    id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
    col1 = db.Column(db.String)
    col2 = db.Column(db.String)
    col3 = db.Column(db.Numeric)
    
    __table_args__ = (
        Index(
            'my_table_unique_idx',
            'col1',
            func.md5(col2),
            unique=True
        ),
    )
效果说明

执行建表/迁移操作后,即可生成符合要求的联合唯一索引:当两条数据的col1值相同、且col2的MD5哈希值一致时,数据库会直接抛出唯一约束冲突,阻止重复数据写入。

内容的提问来源于stack exchange,提问作者Kaushal panchal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.21 16:16:02