当前位置: 首页 > 面试题库 >

sqlalchemy在多列中唯一

班经亘
2023-03-14
问题内容

假设我有一个代表位置的类。位置“属于”客户。位置由Unicode 10个字符代码标识。对于特定客户,“位置代码”在位置之间应该唯一。

The two below fields in combination should be unique
customer_id = Column(Integer,ForeignKey('customers.customer_id')
location_code = Column(Unicode(10))

因此,如果我有两个客户,客户“ 123”和客户“ 456”。它们都可以有一个称为“ main”的位置,但都不能有两个称为main的位置。

我可以在业务逻辑中处理此问题,但是我想确保没有办法轻松地在sqlalchemy中添加需求。unique =
True选项似乎仅在应用于特定字段时才起作用,这将导致整个表仅对所有位置具有唯一代码。


问题答案:

从以下文档的摘录Column

unique –为True时,指示此列包含唯一约束,或者,如果 index也
为True,则指示应使用唯一标志创建索引。要在约束/索引中指定多个列或指定一个显式名称,请显式使用
UniqueConstraint或Index构造。

由于这些属于表而不属于映射的类,因此可以在表定义中声明它们,或者如果使用声明性声明,例如__table_args__

# version1: table definition
mytable = Table('mytable', meta,
    # ...
    Column('customer_id', Integer, ForeignKey('customers.customer_id')),
    Column('location_code', Unicode(10)),

    UniqueConstraint('customer_id', 'location_code', name='uix_1')
    )
# or the index, which will ensure uniqueness as well
Index('myindex', mytable.c.customer_id, mytable.c.location_code, unique=True)


# version2: declarative
class Location(Base):
    __tablename__ = 'locations'
    id = Column(Integer, primary_key = True)
    customer_id = Column(Integer, ForeignKey('customers.customer_id'), nullable=False)
    location_code = Column(Unicode(10), nullable=False)
    __table_args__ = (UniqueConstraint('customer_id', 'location_code', name='_customer_location_uc'),
                     )


 类似资料:
  • 问题内容: 我试图创建一个表,我需要它不允许3个字段相同的行。 当我使用SQLLite在Python中创建表时,使用了以下代码,但几乎没有得到任何结果。它通常在写入2条记录后停止,因此显然可以相信它是重复的。 因此,我希望数据库不允许在ownerID1,ownerID2,accountKey和argID1相同的记录。 谁能帮我这个忙吗? 谢谢! 问题答案: 我不确定是什么问题。它在这里工作正常:

  • 问题内容: df = pd.DataFrame({‘Col1’: [‘Bob’, ‘Joe’, ‘Bill’, ‘Mary’, ‘Joe’], ‘Col2’: [‘Joe’, ‘Steve’, ‘Bob’, ‘Bob’, ‘Steve’], ‘Col3’: np.random.random(5)}) 返回“ Col1”和“ Col2”的唯一值的最佳方法是什么? 所需的输出是 问题答案: 从输入数组

  • 问题内容: 我有一个要运行验证的SQLAlchemy模型。验证的一部分是确保(少数)列上存在UniqueConstraint。我知道列是什么。使用SQLAlchemy可以做到这一点吗?我正在使用的基础数据库是MySQL。 问题答案: 您可以使用SQLalchemy反射API。 为了获得唯一约束,请发出get_unique_constraints。 主键是唯一的,因此您也必须发出get_pk_con

  • 问题内容: 我正在将SEAM 2 / Hibernate与PostgreSQL 9数据库一起使用。我有下表 我想添加一个约束,以确保每个新条目都具有active_band_user和active_band_date的唯一组合。 每秒可能有许多次尝试插入,因此我需要尽可能地提高效率,是否可以在实体映射中使用SEAM /hibernate注释? 提前致谢 问题答案: 没有Hibernate注释在插入/

  • 问题内容: 给定Postgres数据库中的以下三列:第一,第二,第三;我如何创建一个约束使得排列是唯一的? 例如,如果数据库中存在,则将其作为非唯一变量排除在外。 问题答案: 您可以使用hstore创建唯一索引: 更新 实际上

  • 问题内容: 我正在尝试找出SQLAlchemy中正确的联接查询设置,但似乎无法解决。 我有以下表格设置(简化后,我省略了非必要字段): 因此,关系如下: 1:n Group Member 1:n Member Item 1:n Version Item 我想通过从数据库中选择具有特定版本的所有项目行来构建查询。然后,我想按组然后按成员订购。使用Flask / WTForm的输出应如下所示: 我想出