python SQLAlchemy set default nullable=False

iqxoj9l9  于 2024-01-05  发布在  Python
关注(0)|答案(3)|浏览(181)

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

  1. from flask.ext.sqlalchemy import SQLAlchemy
  2. db = SQLAlchemy()
  3. class User(db.Model):
  4. id = db.Column(db.Integer, primary_key=True)
  5. username = db.Column(db.String(80), nullable=False)

字符串
还有更多。有没有一个简单的方法来做到这一点?
先谢了。

1cosmwyk

1cosmwyk1#

只需创建一个 Package 器,

  1. def NullColumn(*args, **kwargs):
  2. kwargs["nullable"] = kwargs.get("nullable", True)
  3. return db.Column(*args, **kwargs)
  4. ...
  5. username = NullColumn(db.String(80))

字符串
按照注解中的建议使用functools.partial

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

yruzcnhs

yruzcnhs2#

由于Column是一个类,根据您的用例,子类化可能更具扩展性。

  1. from sqlalchemy import Column as Col
  2. class Column(Col):
  3. def __init__(self, *args, **kwargs):
  4. kwargs.setdefault('nullable', False)
  5. super().__init__(*args, **kwargs)

字符串
另外请注意,如果未设置,则接受的答案将nullable设置为True。正确答案为False

qzwqbdag

qzwqbdag3#

接受的答案为nullable = True列创建了一个名为NullColumn的 Package 器,这已经是Column在默认情况下所做的。问题要求在创建列时将nullable = False(而不是True)设置为默认值。

  1. from sqlalchemy import Column as Col
  2. def Column(*args, **kwargs):
  3. kwargs.setdefault('nullable', False)
  4. return Col(*args, **kwargs)

字符串
此函数默认返回Columnnullable = False,如果需要,也可以用nullable = True覆盖(与functools.partial解决方案不同)。

相关问题