Object of type datetime is not JSON serializable
I'm new using Simple_Salesforce for Python and I'm trying to update a record of "Account" and one of the values that I need to update is a Date/Time value, but I'm receiving the error: "Object of type datetime is not JSON serializable" when I use the update method like this:
sf.Account.update(sf_id, {'variable1': value1, 'variable2_Date__c': datetime(2021, 2, 1, 1, 2, 3, tzinfo=timezone.utc)})
What am I doing wrong? Or what do I need to improve in order to do the update?
To solve an object of type datetime that is not json serializable, you have to convert the Python datetime into a string that matches the very specific format accepted by Salesforce. Here's what I do in CumulusCI:
def salesforce_from_datetime(d): """Create a Salesforce-style ISO8601 string from a Python datetime""" return d.strftime("%Y-%m-%dT%H:%M:%S.{}+0000").format( str(d.microsecond)[:3].ljust(3, "0") )
That does the ISO8601 formatting but also converts Python's microseconds into the milliseconds that the Salesforce API expects, with exactly three digits.