python - 是否可以在sqlalchemy中使主键和外键一起唯一
问题描述
我有这样的表,我想要siteid
并且device
是唯一的,并且该表必须有一个主键。所以我将设备分配为主键。
class SiteRoleMapping(db.Model):
__table_name__ = "site_role_mapping"
siteid = Column(ForeignKey(('cmp_site.id'), ondelete='CASCADE'), nullable=False)
device = Column(String, primary_key=True)
rolename = Column(String)
description = Column(String, default="None")
解决方案
在不了解您的数据库的情况下,我认为您应该只为映射提供一个整数主键,并在您想要唯一的两个字段上添加一个唯一约束。
像这样:
from sqlalchemy import UniqueConstraint
class SiteRoleMapping(db.Model):
__table_name__ = "site_role_mapping"
id = Column(Integer, primary_key)
site_id = Column(ForeignKey('cmp_site.id', ondelete='CASCADE'), nullable=False)
device = Column(String, primary_key=True)
rolename = Column(String)
description = Column(String, default="None")
# add unique constraint
__table_args__ = (UniqueConstraint('site_id', 'device'), )
但是,阅读表名映射,听起来您正在实现站点和角色之间的多对多关系。这通常使用三张表来完成,一张用于站点,一张用于角色,一张用于映射
所以我希望一个映射有两个外键,而不仅仅是一个。
推荐阅读
- python - 读取列表并打印不重复的元素
- c# - 如何将多个标志作为 Cake 参数传递?
- c# - 从信封事件通知中读取 XML 响应
- css - 如何多次更改样式?
- selenium-chromedriver - 如何为 Katalon 本地代理更新 ChromeDriver
- dataframe - 是否可以使用 Perl 合并具有不同行数的数据帧?
- java - 无法构建累积示例,找不到工件 org.apache.directory.jdbm:apacheds-jdbm1:bundle:2.0.0-M2
- terraform - 在 Terraform 中的模块数组中创建模块属性数组
- vba - 在 Word 文档中保存带有特定文本的 Word 文件
- tsql - 使用 TSQL 执行计算