SQLAlchemy 设置默认 nullable=False
SQLAlchemy set default 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)
还有更多。有没有简单的方法可以做到这一点?
提前致谢。
只需创建一个包装器来设置它
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
是一个 class,subclassing 对我来说似乎更具可扩展性 1。根据您使用的 IDE,代码完成可能仍然可以使用变量和关键字参数。
from sqlalchemy.sql.schema import Column as SAColumn
class Column(SAColumn):
def __init__(self, *args, **kwargs):
kwargs.setdefault('nullable', False)
super().__init__(*args, **kwargs)
db.Column
是 SQLAlchemy 的 Column
class。它只是由 flask-sqlalchemy 与其他 SQLAlchemy 定义一起导入,因此库用户不需要从不同的地方导入。那么只需要一次导入。
1
可以在实例化后直接设置属性,例如 self.nullable
。
接受的答案为名为 NullColumn
的 nullable = True
列创建了一个包装器,这已经是 Column
默认情况下所做的。该问题要求在创建列时将 nullable = False
(而不是 True
)设置为默认值。
from sqlalchemy import Column as Col
def Column(*args, **kwargs):
kwargs.setdefault('nullable', False)
return Col(*args, **kwargs)
此函数 returns 默认为 Column
和 nullable = False
,如果需要也可以用 nullable = True
覆盖(与 functools.partial
解决方案不同) .
我正在使用 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
是一个 class,subclassing 对我来说似乎更具可扩展性 1。根据您使用的 IDE,代码完成可能仍然可以使用变量和关键字参数。
from sqlalchemy.sql.schema import Column as SAColumn
class Column(SAColumn):
def __init__(self, *args, **kwargs):
kwargs.setdefault('nullable', False)
super().__init__(*args, **kwargs)
db.Column
是 SQLAlchemy 的 Column
class。它只是由 flask-sqlalchemy 与其他 SQLAlchemy 定义一起导入,因此库用户不需要从不同的地方导入。那么只需要一次导入。
1
可以在实例化后直接设置属性,例如 self.nullable
。
接受的答案为名为 NullColumn
的 nullable = True
列创建了一个包装器,这已经是 Column
默认情况下所做的。该问题要求在创建列时将 nullable = False
(而不是 True
)设置为默认值。
from sqlalchemy import Column as Col
def Column(*args, **kwargs):
kwargs.setdefault('nullable', False)
return Col(*args, **kwargs)
此函数 returns 默认为 Column
和 nullable = False
,如果需要也可以用 nullable = True
覆盖(与 functools.partial
解决方案不同) .