我想知道是否有可能防止提交重複數據庫。例如,假設有一類如下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)。 –