I was working through a book example on catching exceptions in SQLAlchemy Core using a try/except block:
from sqlalchemy.exc import IntegrityError
ins = insert(users).values(
    username="cookiemon",            #This username is already in db, 
    email_address="[email protected]", should throw an IntegrityError 
    phone="111-111-1111",             for violating unique constraint
    password="password"
    )
try:
    result=connection.execute(ins)
except IntegrityError as error:
    print(error.orig.message, error.params)
However, I get the following error message:
AttributeError: 'IntegrityError' object has no attribute 'message'
This is verbatim from the book example, why can't I display the error message?
In Python3, exceptions no longer have the message attribute, they have args. See python.org/dev/peps/pep-0352/#transition-plan
Credit Ilja Everilä in this comment.
def __str__(self):
    return str(self.args[0]
                if len(self.args) <= 1
                else self.args)
    
Then, replace:
print(error.orig.message, error.params)
with:
print(error)
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With