やりたいこと
データの「ヌルチェック」という表現について、場合によってちょっと曖昧になってしまうかなと思います。
通常は「null(None)ではないこと」を指しているかと思いますが、いままでの職場では「ブランク('')ではないこと」や「項目自体が存在すること」などを言っている人もいるので、、、
今回は「null(None)ではないこと」、「ブランク('')ではないこと」、「項目自体が存在すること」、それぞれCerberusでのチェック方法を調べてみました。
前提
・Pythonインストール済み
・pipenvインストール済み
(今回は便宜上pipenvでやるのですが、ローカルでcerberusなど諸々ライブラリを入れてテストをやっても大丈夫です)
ソースの中身
さっそく調べた結果をソース化しました~
cerberus_validator.py
from cerberus import Validator
SCHEMA = {
'name': {
'type': 'string',
'required': True, # nameという項目自体が存在すること
'empty': False, # name項目の中身がブランクではないこと
'nullable': False # name項目の中身がNone(ヌル)ではないこと
},
}
def validate_info(info):
validator = Validator(allow_unknown=True)
if not validator.validate(info, SCHEMA):
print(validator.errors)
return False
return True
# 正常時
info = {'name': 'satoh'}
print(validate_info(info))
# nameという項目自体が存在していない
info = {}
print(validate_info(info))
# name項目の中身がブランクである
info = {'name': ''}
print(validate_info(info))
# name項目の中身がNone(ヌル)である
info = {'name': None}
print(validate_info(info))
ソースを実行すると、以下のような結果がprintされました!
Cerberusはちゃんとエラー箇所や原因を記録できて便利だねと感じました!
True
{'name': ['required field']}
False
{'name': ['empty values not allowed']}
False
{'name': ['null value not allowed']}
False