Ah yes, I was using a different session without realizing it. Using the same one fixed the problem, thank you.
On Tuesday, June 7, 2016 at 10:48:41 AM UTC-4, Mike Bayer wrote: > > > > On 06/07/2016 03:57 AM, Lukas Nabergall wrote: > > In the unit tests for one module of my app, I'm using the following > setup: > > > > > > Any ideas on how to solve this would be greatly appreciated. > > Perhaps you are using a different session for the query. Here's your > code fragment turned into a full test, runs fine here. Please alter it > to show your error. > > from sqlalchemy import create_engine, Integer, Column > from sqlalchemy.orm import scoped_session, sessionmaker > from sqlalchemy.ext.declarative import declarative_base > from unittest import TestCase, main > > > Base = declarative_base() > > > class Thing(Base): > __tablename__ = 'thing' > id = Column(Integer, primary_key=True) > > > class SomeTestCase(TestCase): > def __init__(self, *args, **kwargs): > super(SomeTestCase, self).__init__(*args, **kwargs) > self.engine = create_engine( > "postgresql+psycopg2://scott:tiger@localhost/test", > echo=True) > self.session = scoped_session(sessionmaker(bind=self.engine))() > > def setUp(self): > Base.metadata.create_all(self.engine) > self.session.begin_nested() > > def tearDown(self): > self.session.rollback() > self.session.close() > Base.metadata.drop_all(self.engine) > > def test_somefunction(self): > self.session.begin_nested() > try: > object1 = Thing() > self.session.add(object1) > self.session.flush() > > object2 = Thing() > self.session.add(object2) > self.session.flush() > self.session.commit() > except: > self.session.rollback() > raise > else: > object_id = object2.id # Also works > self.session.query(Thing).filter(Thing.id == object_id).one() > > main() > > > output: > > 2016-06-07 10:47:20,740 INFO sqlalchemy.engine.base.Engine select > version() > 2016-06-07 10:47:20,740 INFO sqlalchemy.engine.base.Engine {} > 2016-06-07 10:47:20,741 INFO sqlalchemy.engine.base.Engine select > current_schema() > 2016-06-07 10:47:20,741 INFO sqlalchemy.engine.base.Engine {} > 2016-06-07 10:47:20,742 INFO sqlalchemy.engine.base.Engine SELECT > CAST('test plain returns' AS VARCHAR(60)) AS anon_1 > 2016-06-07 10:47:20,743 INFO sqlalchemy.engine.base.Engine {} > 2016-06-07 10:47:20,743 INFO sqlalchemy.engine.base.Engine SELECT > CAST('test unicode returns' AS VARCHAR(60)) AS anon_1 > 2016-06-07 10:47:20,743 INFO sqlalchemy.engine.base.Engine {} > 2016-06-07 10:47:20,744 INFO sqlalchemy.engine.base.Engine show > standard_conforming_strings > 2016-06-07 10:47:20,744 INFO sqlalchemy.engine.base.Engine {} > 2016-06-07 10:47:20,746 INFO sqlalchemy.engine.base.Engine select > relname from pg_class c join pg_namespace n on n.oid=c.relnamespace > where pg_catalog.pg_table_is_visible(c.oid) and relname=%(name)s > 2016-06-07 10:47:20,746 INFO sqlalchemy.engine.base.Engine {'name': > u'thing'} > 2016-06-07 10:47:20,747 INFO sqlalchemy.engine.base.Engine > CREATE TABLE thing ( > id SERIAL NOT NULL, > PRIMARY KEY (id) > ) > > > 2016-06-07 10:47:20,747 INFO sqlalchemy.engine.base.Engine {} > 2016-06-07 10:47:20,753 INFO sqlalchemy.engine.base.Engine COMMIT > 2016-06-07 10:47:20,757 INFO sqlalchemy.engine.base.Engine BEGIN > (implicit) > 2016-06-07 10:47:20,758 INFO sqlalchemy.engine.base.Engine SAVEPOINT > sa_savepoint_1 > 2016-06-07 10:47:20,758 INFO sqlalchemy.engine.base.Engine {} > 2016-06-07 10:47:20,759 INFO sqlalchemy.engine.base.Engine SAVEPOINT > sa_savepoint_2 > 2016-06-07 10:47:20,759 INFO sqlalchemy.engine.base.Engine {} > 2016-06-07 10:47:20,760 INFO sqlalchemy.engine.base.Engine INSERT INTO > thing DEFAULT VALUES RETURNING thing.id > 2016-06-07 10:47:20,760 INFO sqlalchemy.engine.base.Engine {} > 2016-06-07 10:47:20,761 INFO sqlalchemy.engine.base.Engine INSERT INTO > thing DEFAULT VALUES RETURNING thing.id > 2016-06-07 10:47:20,761 INFO sqlalchemy.engine.base.Engine {} > 2016-06-07 10:47:20,764 INFO sqlalchemy.engine.base.Engine RELEASE > SAVEPOINT sa_savepoint_2 > 2016-06-07 10:47:20,764 INFO sqlalchemy.engine.base.Engine {} > 2016-06-07 10:47:20,767 INFO sqlalchemy.engine.base.Engine SELECT > thing.id AS thing_id > FROM thing > WHERE thing.id = %(id_1)s > 2016-06-07 10:47:20,767 INFO sqlalchemy.engine.base.Engine {'id_1': 2} > 2016-06-07 10:47:20,769 INFO sqlalchemy.engine.base.Engine ROLLBACK TO > SAVEPOINT sa_savepoint_1 > 2016-06-07 10:47:20,769 INFO sqlalchemy.engine.base.Engine {} > 2016-06-07 10:47:20,771 INFO sqlalchemy.engine.base.Engine ROLLBACK > 2016-06-07 10:47:20,772 INFO sqlalchemy.engine.base.Engine select > relname from pg_class c join pg_namespace n on n.oid=c.relnamespace > where pg_catalog.pg_table_is_visible(c.oid) and relname=%(name)s > 2016-06-07 10:47:20,772 INFO sqlalchemy.engine.base.Engine {'name': > u'thing'} > 2016-06-07 10:47:20,774 INFO sqlalchemy.engine.base.Engine > DROP TABLE thing > 2016-06-07 10:47:20,774 INFO sqlalchemy.engine.base.Engine {} > 2016-06-07 10:47:20,777 INFO sqlalchemy.engine.base.Engine COMMIT > . > ---------------------------------------------------------------------- > Ran 1 test in 0.043s > > OK > > > > > > > > > -- > > 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. > -- 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.