python class中UniqueConstraint的区别与使用
Difference and use of UniqueConstraint in python class
我正在使用 python 2.7 和 sqlalchemy 0.9.9。
在我们的代码中,我发现了定义 UniqueConstraint 的不同方法,我不知道哪一种是正确的,或者我们是否需要它们(我们不想用我们的代码创建 table)。
示例 1:
class ExampleOne(OrmModelBase, TableModelBase):
__tablename__ = 'example_one'
example_one_id = Column(Integer, Sequence('seq_example_one_example_one_id'),
primary_key=True, nullable=False)
example_one_name = Column(String, unique=True, nullable=False)
def __init__(self):
self.example_one_id = self.getNextPkValue()
self.example_one_name = ''
示例 2(版本 1):
class ExampleTwo(OrmModelBase, TableModelBase):
__tablename__ = 'example_two'
example_two_id = Column(Integer, Sequence(
'seq_example_two_example_two_id'), primary_key=True,
nullable=False)
example_two_name = Column(String, nullable=False)
UniqueConstraint(
"example_two_id", "example_two_name",
name="uk_example_two_example_two_id_example_two_name")
def __init__(self):
self.example_two_id = self.getNextPkValue()
self.example_two_name = example_two_name
示例 2(版本 2):
class ExampleTwo(OrmModelBase, TableModelBase):
__tablename__ = 'example_two'
example_two_id = Column(Integer, Sequence(
'seq_example_two_example_two_id'), primary_key=True,
nullable=False)
example_two_name = Column(String, nullable=False)
uk_example_two_example_two_id_example_two_name = UniqueConstraint(
"example_two_id", "example_two_name")
def __init__(self):
self.example_two_id = self.getNextPkValue()
self.example_two_name = example_two_name
示例 3:
class ExampleThree(OrmModelBase, TableModelBase):
__tablename__ = 'example_three'
example_three_id = Column(Integer,
Sequence('example_three_example_three_id'),
primary_key=True)
example_three_name = Column(String, nullable=False)
__table_args__ = (
UniqueConstraint("example_three_name", name="uk_example_three_name"),
)
def __init__(self):
self.example_three_id = self.getNextPkValue()
self.example_three_name = ""
我不想使用此代码创建 table,我使用所需的约束手动创建所需的 table。
- 当我不创建 table 时,我是否需要唯一约束的定义(或 primary_key、可空等)?什么时候有效果
我确实在 class?
中写了 3 个版本之一
我读到第一个示例是针对单个列的唯一约束,第二个示例是针对多个列的唯一约束。但是我发现的示例总是使用 Table,而在我的案例中只使用了示例三 (classes)。
- 使用unique constraints有什么区别和区别吗
我希望有人能帮助我。感谢您的宝贵时间!
sqlalchemy 中唯一约束的定义确实只用于模式生成(创建表)。
此外,主要的 RDBMS 之间存在差异,它们是如何定义的(尤其是跨多个列)以及完全可能的定义。这是 - 当 sqlalchemy 支持时 - 由方言处理并且或多或少是不透明的。
所以...如果您将它们排除在外,您就不会遭受后果。
但是
我会将它们留在文档代码中,它们可能有助于提醒底层 RDBMS 以特定方式运行的原因。
我正在使用 python 2.7 和 sqlalchemy 0.9.9。 在我们的代码中,我发现了定义 UniqueConstraint 的不同方法,我不知道哪一种是正确的,或者我们是否需要它们(我们不想用我们的代码创建 table)。
示例 1:
class ExampleOne(OrmModelBase, TableModelBase):
__tablename__ = 'example_one'
example_one_id = Column(Integer, Sequence('seq_example_one_example_one_id'),
primary_key=True, nullable=False)
example_one_name = Column(String, unique=True, nullable=False)
def __init__(self):
self.example_one_id = self.getNextPkValue()
self.example_one_name = ''
示例 2(版本 1):
class ExampleTwo(OrmModelBase, TableModelBase):
__tablename__ = 'example_two'
example_two_id = Column(Integer, Sequence(
'seq_example_two_example_two_id'), primary_key=True,
nullable=False)
example_two_name = Column(String, nullable=False)
UniqueConstraint(
"example_two_id", "example_two_name",
name="uk_example_two_example_two_id_example_two_name")
def __init__(self):
self.example_two_id = self.getNextPkValue()
self.example_two_name = example_two_name
示例 2(版本 2):
class ExampleTwo(OrmModelBase, TableModelBase):
__tablename__ = 'example_two'
example_two_id = Column(Integer, Sequence(
'seq_example_two_example_two_id'), primary_key=True,
nullable=False)
example_two_name = Column(String, nullable=False)
uk_example_two_example_two_id_example_two_name = UniqueConstraint(
"example_two_id", "example_two_name")
def __init__(self):
self.example_two_id = self.getNextPkValue()
self.example_two_name = example_two_name
示例 3:
class ExampleThree(OrmModelBase, TableModelBase):
__tablename__ = 'example_three'
example_three_id = Column(Integer,
Sequence('example_three_example_three_id'),
primary_key=True)
example_three_name = Column(String, nullable=False)
__table_args__ = (
UniqueConstraint("example_three_name", name="uk_example_three_name"),
)
def __init__(self):
self.example_three_id = self.getNextPkValue()
self.example_three_name = ""
我不想使用此代码创建 table,我使用所需的约束手动创建所需的 table。
- 当我不创建 table 时,我是否需要唯一约束的定义(或 primary_key、可空等)?什么时候有效果 我确实在 class? 中写了 3 个版本之一
我读到第一个示例是针对单个列的唯一约束,第二个示例是针对多个列的唯一约束。但是我发现的示例总是使用 Table,而在我的案例中只使用了示例三 (classes)。
- 使用unique constraints有什么区别和区别吗
我希望有人能帮助我。感谢您的宝贵时间!
sqlalchemy 中唯一约束的定义确实只用于模式生成(创建表)。 此外,主要的 RDBMS 之间存在差异,它们是如何定义的(尤其是跨多个列)以及完全可能的定义。这是 - 当 sqlalchemy 支持时 - 由方言处理并且或多或少是不透明的。
所以...如果您将它们排除在外,您就不会遭受后果。
但是
我会将它们留在文档代码中,它们可能有助于提醒底层 RDBMS 以特定方式运行的原因。