[Python-ideas] Add recordlcass to collections module

Wes Turner wes.turner at gmail.com
Mon Sep 3 03:59:53 EDT 2018

On Mon, Sep 3, 2018 at 3:25 AM Jacco van Dorp <j.van.dorp at deonet.nl> wrote:

> This feels really useful to me to make some quick changes to a database -
> perhaps a database layer could return an class of type Recordclass, and
> then you just simply mutate it and shove it back into the database.
> Pseudocode:
> record = database.execute("SELECT * FROM mytable WHERE primary_key = 15")
> record.mostRecentLoggedInTime = time.time()
> database.execute(f"UPDATE mytable SET mostRecentLoggedInTime =
> {record.mostRecentLoggedInTime} WHERE primary_key = {record.primary_key}":)
> Or any smart database wrapper might just go:
> database.updateOrInsert(table = mytable, record = record)
> And be smart enough to figure out that we already have a primary key
> unequal to some sentinel value like None, and do an update, while it could
> do an insert if the primary key WAS some kind of sentinel value.

SQLAlchemy.orm solves for this (with evented objects with evented

- Transient, Pending, Persistent, Deleted, Detached
- flag_modified isn't necessary in most cases because attribute mutation on
mapped classes deriving from Base(declarative_base()) is evented

There are packages for handling attribute states with the Django ORM, as

- https://github.com/romgar/django-dirtyfields
- https://github.com/Suor/django-dirty

What would be the performance impact of instead subclassing from
recordclass? IDK.

pyrsistent.PRecord(PMap) is immutable and supports .attribute access:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20180903/f88857ce/attachment.html>

More information about the Python-ideas mailing list