0

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?

1 Answer 1

2

Solved, you won't believe it, but I was creating tuples accidentally:

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 commas were there, and I was thinking the tuples were related to SQL Alchemy. Anyway, it happens...

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you! I had the same issue because I was copy-pasting some model creation code and didn't think to look at the end of the line!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.