I\'m using SQLAlchemy to access PostgreSQL database, and I defined the object like this:
class SessionLog(Base):
__tablename__ = \'session_log\'
id
Found this gist which helped me a lot. I added a custom __setitem__ to be able to change an item in the list, and __delitem__ to delete one:
from sqlalchemy.ext.mutable import Mutable
from sqlalchemy.dialects.postgresql import ARRAY
class MutableList(Mutable, list):
def __setitem__(self, key, value):
list.__setitem__(self, key, value)
self.changed()
def __delitem__(self, key):
list.__delitem__(self, key)
self.changed()
def append(self, value):
list.append(self, value)
self.changed()
def pop(self, index=0):
value = list.pop(self, index)
self.changed()
return value
@classmethod
def coerce(cls, key, value):
if not isinstance(value, MutableList):
if isinstance(value, list):
return MutableList(value)
return Mutable.coerce(key, value)
else:
return value
Then in your model:
your_field = db.Column(
MutableList.as_mutable(ARRAY(db.String())),
server_default="{}"
)