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.