I'm having problems to insert a value as an enum value. This is my model:
class InvitationStatusEnum(enum.Enum):
FAILED = 1
SENT = 2
RESENT = 3
ACCEPTED = 4
class Invitations(db.Model):
__tablename__ = "tb_invitations"
invitation_id = db.Column(db.Integer, nullable=False, primary_key=True)
_from = db.Column("from", db.String, nullable=False)
to = db.Column(db.String, nullable=False)
status = db.Column("status", db.Enum(*tuple(e.name for e in tuple(InvitationStatusEnum)), name="invitation_status_enum", create_type=False))
created_at = db.Column(db.DateTime(timezone=True), nullable=False)
def __init__(self, **kwargs):
self.invitation_id = kwargs["invitation_id"]
self._from = kwargs["_from"],
self.to = kwargs["to"],
self.status = kwargs["status"],
self.created_at = datetime.now()
The type is already created in Postgres as invitation_status_enum. Here I do the insert:
new_invitation = model.Invitations(
invitation_id=1,
_from=environ["CONCIL_NOTIFICATION_EMAIL"],
to=to,
status=model.InvitationStatusEnum.SENT.name
)
query = db.session.add(new_invitation)
print(query)
db.session.flush()
And I get the following error:
(builtins.LookupError) '('SENT',)' is not among the defined enum values. Enum name: invitation_status_enum. Possible values: FAILED, SENT, RESENT, ACCEPTED\n[SQL: INSERT INTO tb_invitations (invitation_id, \"from\", \"to\", status, created_at) VALUES (%(invitation_id)s, %(from)s, %(to)s, %(status)s, %(created_at)s)]\n[parameters: [{'status': ('SENT',), 'created_at': datetime.datetime(2020, 10, 15, 10, 52, 6, 819247), 'to': ('[email protected]',), 'invitation_id': 1, 'from': ('[email protected]',)}]]
If the status is model.InvitationStatusEnum.SENT or model.InvitationStatusEnum.SENT.value, it doesn't matter, I get the same error. How do I insert as a value that postgres can accept?