【问题标题】:Defining a part of a column as a unique field in sqlalchemy将列的一部分定义为 sqlalchemy 中的唯一字段
【发布时间】:2010-06-26 14:23:14
【问题描述】:

在 sqlalchemy 0.5 中,我有一个像这样定义的表:

orders = Table('orders', metadata,
    Column('id', Integer, primary_key=True),
    Column('responsable', String(255)),
    Column('customer', String(255)),    
    Column('progressive', Integer),
    Column('date', Date),
    Column('exported', Boolean()),    
)

是否可以仅将日期的客户和年份定义为唯一的? 年份不仅是日期的一部分,而且将日期的年份和客户作为表的单个键可能会很好。 在 sqlalchemy 0.5 中可以吗?

谢谢

【问题讨论】:

  • 您的问题将唯一性(主键所必需的)与索引混淆了。

标签: python sqlalchemy


【解决方案1】:

如果不将日期字段拆分为月份字段、日期字段和年份字段,则确实无法按照您的要求进行操作。将整个日期(月/日/年)包含在复合主数据中(可能)会更容易和更简单;如果 (id, year) 唯一地定义了一条记录,那么 (id, date) 也是如此。

【讨论】:

    【解决方案2】:

    documentation:

    可以为多个列分配 primary_key=True 标志,表示一个 多列主键,称为 复合主键。

    【讨论】:

      【解决方案3】:

      您可以在约束中使用函数,但它不是独立于数据库的。详情见这里:Compound UniqueConstraint with a function

      但是,我认为最好的做法是为年份创建一个列。这肯定会更容易。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-13
        • 1970-01-01
        • 2013-04-10
        • 2018-11-03
        • 2017-04-15
        • 2013-12-16
        相关资源
        最近更新 更多