我想以这样的方式使用 sqlalchemy:
email1 = EmailModel(email="user@domain.com", account=AccountModel(name="username"))
email2 = EmailModel(email="otheruser@domain.com", account=AccountModel(name="username"))
通常 sqlalchemy 将为帐户创建两个条目并将每个电子邮件地址链接到此。如果我将帐户名设置为唯一 sqlalchemy 会引发异常,告诉我已经存在具有相同值的条目。这很有意义并且按预期工作。
现在我自己想出了一种方法,它允许上述代码,并且只通过覆盖AccountModel 类的新构造函数来创建一个帐户:
def __new__(*cls, **kw):
if len(kw) and "name" in kw:
x = session.query(cls.__class__).filter(cls[0].name==kw["name"]).first()
if x: return x
return object.__new__(*cls, **kw)
这对我来说非常有效。但问题是:
- 这是正确的方法吗?
- 是否有实现相同目标的 sqlalchemy 方法?
我正在使用最新的 0.8.x SQLAlchemy 版本和 Python 2.7.x
谢谢你的帮助 :)