繁体   English   中英

如何在SQLAlchemy的ExcludeConstraint中使用CAST?

[英]How can I use a CAST in an ExcludeConstraint in SQLAlchemy?

在PostgreSQL中,我可以创建一个包含CAST的排除约束表( CAST是必需的,因为UUID类型没有gist的默认操作符类):

CREATE EXTENSION btree_gist;
CREATE TABLE example (
  id         UUID,
  some_range INT4RANGE,
  EXCLUDE USING gist (CAST("id" AS TEXT) WITH =, some_range WITH &&)
);

我不知道如何在SQLAlchemy中完成相同的任务。 我尝试了这个:

from sqlalchemy import *
from sqlalchemy.dialects.postgresql import (
    UUID, INT4RANGE, ExcludeConstraint, TEXT
)

class Example(Base):
    __tablename__ = 'example'
    id = Column(UUID)
    some_range = Column(INT4RANGE)
    __table_args__ = (
        ExcludeConstraint(
            (cast('id', TEXT), '='), ('some_range', '&&')
        ),
    )

但是我收到错误sqlalchemy.exc.ArgumentError: Can't add unnamed column to column collection

如何获得SQLAlchemy在ExcludeConstraint使用CAST 或者,如何使用原始SQL在表上定义排除约束?

https://bitbucket.org/zzzeek/sqlalchemy/issue/3454开始 ,解决方法(对于1.0.6之前的版本)为

from sqlalchemy.sql.elements import quoted_name

    ExcludeConstraint(
        (Column(quoted_name('CAST("id" AS TEXT)', quote=False)), '='), ('some_range', '&&')
    ),

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM