'psycopg2: Can't adapt type 'UUID'?
I am using psycopg2 to try to insert an entry into a table where the type of the data is the Postgres type 'uuid'.
According to this page, I should be able to directly use the Python type uuid.UUID, as in the following code:
uuid_entry = uuid.uuid4()
command = "INSERT INTO MyTable (uuid) VALUES (%s)"
cursor.execute(command, (uuid_entry,))
However, when I try to do this, it throws the error:
ProgrammingError(can't adapt type 'UUID')
Any ideas on why this is happening? Thanks.
Solution 1:[1]
As author noted in comments, to pass UUID objects into cursor methods one have to call register_uuid()
first once:
import psycopg2.extras
# call it in any place of your program
# before working with UUID objects in PostgreSQL
psycopg2.extras.register_uuid()
# now you can pass UUID objects into psycopg2 functions
cursor.execute("INSERT INTO MyTable (uuid) VALUES (%s)", (uuid.uuid4(),))
# ... and even get it from there
cursor.execute("SELECT uuid FROM MyTable")
value, = cursor.fetchone()
assert isinstance(value, uuid.UUID)
Solution 2:[2]
uuid_entry = str(uuid.uuid4())
This works for me. Not sure if it is the right approach.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | Milo |