我正在使用 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)
还有更多。有没有简单的方法可以做到这一点?
提前致谢。
只需创建一个设置它的包装器
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)
Column
是一个类,因此根据您的用例,子类化可能更具可扩展性。
from sqlalchemy import Column as Col
class Column(Col):
def __init__(self, *args, **kwargs):
kwargs.setdefault('nullable', False)
super().__init__(*args, **kwargs)
另请注意,如果未设置,接受的答案会将
nullable
设置为 True
。正确的是False
。
接受的答案为名为
nullable = True
的 NullColumn
列创建一个包装器,这已经是 Column
默认执行的操作。该问题要求在创建列时将 nullable = False
(不是 True
)设置为默认值。
from sqlalchemy import Column as Col
def Column(*args, **kwargs):
kwargs.setdefault('nullable', False)
return Col(*args, **kwargs)
此函数默认返回带有
Column
的 nullable = False
,如果需要,也可以用 nullable = True
覆盖(与 functools.partial
解决方案不同)。