Simon's answer was almost what I needed, but was missing the details about using context.connection.scalar to run the query.
I ended up finding a very similar issue in another thread from a few months ago here: https://groups.google.com/d/msg/sqlalchemy/h71QfUtCCmw/U6ITbv5pFgAJ Thank you both for your help! :) On Friday, 18 November 2016 16:55:36 UTC, Mike Bayer wrote: > > > > On 11/18/2016 11:25 AM, Alexander O'Donovan-Jones wrote: > > That's a cool idea, but it would need to reference the instance we've > > created to use the `id` atribute. > > I was almost going to ask if that's what you meant, but you didn't > specify that in your question. Simon's answer contains the adjustment > you'd need. > > > > > ie the sql would be `select max(version)+1 from responses where id = > :id` > > > > On Friday, 18 November 2016 14:39:52 UTC, Mike Bayer wrote: > > > > > > > > On 11/18/2016 09:10 AM, Alexander O'Donovan-Jones wrote: > > > I'm currently working on using the ORM features of sqlalchemy with > a > > > legacy database table. The table can be roughly described like > this: > > > > > > class APIResponse(Base): > > > __tablename__ = 'responses' > > > id = Column(Text, primary_key=True) > > > version = Column(Integer, primary_key=True) > > > payload = Column(JSONB, nullable=False) > > > created_at = Column(DateTime, nullable=False) > > > > > > > > > The table stores JSON payloads where the primary key is determined > by > > > the combination of the id and version columns (as a composite > primary > > > key). What I'm trying to work out is whether it's possible to have > > the > > > value of the version column be the result of > > > func.max(APIResponse.version) + 1, that is, MAX()+1 to increment > the > > > version. > > > > > > This is running on Postgresql, and so I took a look at the > sequence > > > support, but that appears to be a table wide sequence, and not > > keyed off > > > a value (ie: I couldn't have 10000 id's each mapping to a sequence > to > > > generate versions). > > > > > > you can set any SQL expression you want for a default, some examples > at > > > https://docs.sqlalchemy.org/en/latest/core/defaults.html#sql-expressions > > < > https://docs.sqlalchemy.org/en/latest/core/defaults.html#sql-expressions>. > > > > > This would look like > > default=select([func.max(API.response.version) + > > 1]). hope that helps. > > > > -- > > SQLAlchemy - > > The Python SQL Toolkit and Object Relational Mapper > > > > http://www.sqlalchemy.org/ > > > > To post example code, please provide an MCVE: Minimal, Complete, and > > Verifiable Example. See http://stackoverflow.com/help/mcve for a full > > description. > > --- > > You received this message because you are subscribed to the Google > > Groups "sqlalchemy" group. > > To unsubscribe from this group and stop receiving emails from it, send > > an email to sqlalchemy+...@googlegroups.com <javascript:> > > <mailto:sqlalchemy+unsubscr...@googlegroups.com <javascript:>>. > > To post to this group, send email to sqlal...@googlegroups.com > <javascript:> > > <mailto:sqlal...@googlegroups.com <javascript:>>. > > Visit this group at https://groups.google.com/group/sqlalchemy. > > For more options, visit https://groups.google.com/d/optout. > -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.