Python sqlalchemy可以添加字段级规则,即两个特定列不能同时为“无”?

Python sqlalchemy可以添加字段级规则,即两个特定列不能同时为“无”?,python,sqlalchemy,flask-sqlalchemy,Python,Sqlalchemy,Flask Sqlalchemy,我有一个这样的模型: class Foo(db.Model): id = db.Column(db.Integer, primary_key=True) # omitted lengthy codes... spam = db.relationship('Spam') spam_id = db.Column(db.Integer, db.ForeignKey('spams.id')) bar = db.relationship('Bar')

我有一个这样的模型:

class Foo(db.Model):

    id = db.Column(db.Integer, primary_key=True)

    # omitted lengthy codes...

    spam = db.relationship('Spam')
    spam_id = db.Column(db.Integer, db.ForeignKey('spams.id'))

    bar = db.relationship('Bar')
    bar_id = db.Column(db.Integer, db.ForeignKey('bars.id'))

    created = db.Column(db.DateTime, server_default=db.func.now())
在插入/更新过程中,
spam\u id
bar\u id
不能同时为
None
的行为,Flask SQLAlchemy是否有任何选项可供添加?但是,如果这些列中至少有一列具有值,则将接受该值。

您可以使用

正在尝试添加垃圾邮件id为None的新Foo实例?好的,你可以

foo=Foo(spam_id=None, bar_id=1)
sqlalchemy_session.add(foo)
sqlalchemy_session.commit()
正在尝试添加垃圾邮件id和酒吧id均为None的Foo?不,先生

foo=Foo(spam_id=None, bar_id=None)
sqlalchemy_session.add(foo)
sqlalchemy_session.commit()  # Raises Exception

引发的异常来自您的DBMS,例如PostgresQL和psycopg2驱动程序,它就是psycopg2.IntegrityError,这正是我需要的。
foo=Foo(spam_id=None, bar_id=None)
sqlalchemy_session.add(foo)
sqlalchemy_session.commit()  # Raises Exception