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 [email protected]
<mailto:[email protected]>.
To post to this group, send email to [email protected]
<mailto:[email protected]>.
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to