Python SQLAlchemy set default nullable=False

Python SQLAlchemy set default nullable=False,python,sqlalchemy,flask-sqlalchemy,Python,Sqlalchemy,Flask Sqlalchemy,我正在使用SQLAlchemy for Flask创建一些模型。问题是,几乎我所有的列都需要nullable=False,因此我正在寻找一种方法,在创建列时将此选项设置为默认值。当然我可以手动添加它们(作为Vim练习),但我今天不想这样做。作为参考,我的设置(models.py)如下所示: from flask.ext.sqlalchemy import SQLAlchemy db = SQLAlchemy() class User(db.Model): id = db.Colum

我正在使用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)

等等,我快疯了,默认值为null是假的?是sqlite3的默认值为nullable true吗?默认值为
nullable=true
,我选中了。嗯,不,默认情况下它不为NULL。。。(请注意,此字段仅在创建数据库时使用)不,我发誓,您必须手动添加NOTNULL才能使其不为空。我检查了源代码。除非该列用作主键列,否则默认值为nullable=True,在这种情况下,默认值为nullable=false改为使用functools.partial。@PedroWerneck我不同意。。。但是现在只想保持它的简单性:P(尽管现在我添加了它…这非常简单)
functools.partial
在Python 3.6+中搞砸了类型推断。输入import Type时需要
;NullColumn:键入[Column]=partial(Column,nullable=True)
以使lint和/或autocomplete继续工作,或者只使用简单版本。