私は次のような方法でsqlalchemyを使用したいと思います:
email1 = EmailModel(email="user@domain.com", account=AccountModel(name="username"))
email2 = EmailModel(email="otheruser@domain.com", account=AccountModel(name="username"))
通常、sqlalchemyはアカウントに2つのエントリを作成し、各メールアドレスをこれにリンクします。アカウント名を一意に設定すると、sqlalchemyは、同じ値のエントリがすでに存在することを通知する例外をスローします。これはすべて理にかなっており、期待どおりに機能します。
今、私は、前述のコードを許可し、AccountModelクラスの新しいコンストラクターを上書きすることによってアカウントを1回だけ作成する方法を自分で考え出しました。
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.xSQLAlchemyバージョンとPython2.7.xを使用しています
助けてくれてありがとう:)