我想知道是否有可能防止提交重复数据库。例如,假设有一类如下SQLAlchemy,防止重复行
class Employee(Base):
id = Column(Integer, primary_key=True)
name = Column(String)
如果我做了一系列的这些对象,
employee1 = Employee(name='bob')
employee2 = Employee(name='bob')
session.add_all([employee1, employee2])
session.commit()
我想只有一行被添加到数据库中, employee1
和employee2
指向内存中的同一个对象(如果可能的话)。
SQLAlchemy中是否有完成此功能的功能?或者我需要确保重复项不存在编程?
这听起来像你有错误的主键。如果这是你想要的,你应该把名字作为主键。尽管如此,人们无法真正改变名称而不会引起巨大的多表数据库更新,因为所有外键都必须改变。另外,如果您尝试将名称更改为现有名称,会发生什么情况?你只想消灭已经存在的那一排? – Omnifarious
按名称创建唯一索引(即使它不是主键)看起来像强制名称唯一性的正确方法。 – 9000
为了防止提交重复文件,请执行@ 9000所说的操作。要让会话在第二个例子中只创建一次bob,请参阅[unique object recipes](https://bitbucket.org/zzzeek/sqlalchemy/wiki/UsageRecipes/UniqueObject)。 –