For short answer, in this case, I would use second option.
For longer answer:
Raise Exception Within Python:
Using the save method with a ValueError is checked within the python code, it can add overhead for each time save method is called and it wont evaluate inserted data.
But if you need to check more complex code which database engine cant handle or add custom exceptions, it is better to use first option.
Using CheckConstraint:
Using second option, evaluation is done by database engine, what is more efficient that python and it also can validate inserted data. In this case it would be better to use db engine to validate, to also check insert data and keep it closer to source. If check is simple enought for database engine, use CheckConstraint method.