SQLAlchemy 设置默认 nullable=False

新手上路,请多包涵

我正在使用 SQLAlchemy for Flask 创建一些模型。问题是,几乎我所有的专栏都需要 nullable=False ,所以我正在寻找一种在创建专栏时将此选项设置为默认选项的方法。当然我可以手动添加它们(作为 Vim 练习),但我今天不喜欢它。作为参考,这是我的设置( models.py )的样子:

 from flask.ext.sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
     id = db.Column(db.Integer, primary_key=True)
     username = db.Column(db.String(80), nullable=False)

还有很多。有没有简单的方法可以做到这一点?

提前致谢。

原文由 John Bergson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

只需创建一个包装器来设置它

def NullColumn(*args,**kwargs):
    kwargs["nullable"] = kwargs.get("nullable",True)
    return db.Column(*args,**kwargs)

...
username = NullColumn(db.String(80))

按照评论中的建议使用 functools.partial

 from functools import partial
NullColumn = partial(Column,nullable=True)

原文由 Joran Beasley 发布,翻译遵循 CC BY-SA 3.0 许可协议

由于 Column 是一个类,子类化似乎更具可扩展性。

 from sqlalchemy.sql.schema import Column as Col

class Column(Col):
    def __init__(self, *args, **kwargs):
        kwargs.setdefault('nullable', False)
        super().__init__(*args, **kwargs)

原文由 Maicon Mauricio 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题