I finally got the chance to upgrade my application to use SA 0.2. Yay!!
However, I have found a regression. After a session is cleared
objects loaded by that session can no longer load related objects.
Example:
>>> s = create_session()
>>> user = s.get(User, 8)
>>> s.clear()
>>> user.addresses
[]
The user should actually have 3 addresses, but since the session was
cleared the user object is not associated with a session and cannot
load its addresses. Is this a bug or did something change that
requires objects to be disassociated from their session when the
session is cleared? A test is attached.
~ Daniel
from testbase import AssertMixin
import testbase
import unittest, sys, datetime
import sqlalchemy.databases.sqlite as sqllite
import tables
from tables import *
db = testbase.db
from sqlalchemy import *
from sqlalchemy.engine import ResultProxy, RowProxy
# test merging a composed object.
# test that when cascading an operation, like "merge", lazy-loaded scalar and list attributes that werent already loaded on the given object remain not loaded.
# test putting an object in session A, "moving" it to session B, insure its in B and not in A
class SessionTest(AssertMixin):
def setUpAll(self):
db.echo = False
tables.create()
tables.data()
db.echo = testbase.echo
def tearDownAll(self):
db.echo = False
tables.drop()
db.echo = testbase.echo
def tearDown(self):
clear_mappers()
def setUp(self):
pass
def test_object_session_after_clear_session(self):
import sqlalchemy.orm.session
get_session = sqlalchemy.orm.session.object_session
mapper(User, users)
s = create_session()
u = s.get(User, 8)
assert get_session(u) is s # before clear
s.clear()
assert get_session(u) is s # after clear
def test_relation_after_clear_session(self):
import sqlalchemy.orm.session
get_session = sqlalchemy.orm.session.object_session
mapper(User, users, properties={
'addresses': relation(mapper(Address, addresses), backref="user")})
s = create_session()
addrs = s.query(Address).select(Address.c.user_id == 8)
user = s.get(User, 8)
assert len(addrs) == 3
s.clear()
assert len(user.addresses) == 3
if __name__ == "__main__":
testbase.main()
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users