mirror of
https://github.com/sqlalchemy/sqlalchemy.git
synced 2026-06-04 06:48:27 -04:00
3cd10102e4
- added query_cls keyword argument to sessionmaker(); allows user-defined Query subclasses to be generated by query(). - added @attributes.on_reconstitute decorator, MapperExtension.on_reconstitute, both receieve 'on_load' attribute event allowing non-__init__ dependent instance initialization routines. - push memusage to the top to avoid pointless heisenbugs - renamed '_foostate'/'_fooclass_manager' to '_sa_instance_state'/'_sa_class_manager' - removed legacy instance ORM state accessors - query._get() will use _remove_newly_deleted instead of expunge() on ObjectDeleted, so that transaction rollback restores the previous state - removed MapperExtension.get(); replaced by a user-defined Query subclass - removed needless **kwargs from query.get() - removed Session.get(cls, id); this is redundant against Session.query(cls).get(id) - removed Query.load() and Session.load(); the use case for this method has never been clear, and the same functionality is available in more explicit ways
56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
import testenv; testenv.configure_for_tests()
|
|
from testlib.sa import MetaData, Table, Column, Integer
|
|
from testlib.sa.orm import mapper, create_session
|
|
from testlib import sa, testing
|
|
from orm import _base
|
|
|
|
|
|
class BindTest(_base.MappedTest):
|
|
def define_tables(self, metadata):
|
|
Table('test_table', metadata,
|
|
Column('id', Integer, primary_key=True,
|
|
test_needs_autoincrement=True),
|
|
Column('data', Integer))
|
|
|
|
def setup_classes(self):
|
|
class Foo(_base.BasicEntity):
|
|
pass
|
|
|
|
@testing.resolve_artifact_names
|
|
def setup_mappers(self):
|
|
meta = MetaData()
|
|
test_table.tometadata(meta)
|
|
|
|
assert meta.tables['test_table'].bind is None
|
|
mapper(Foo, meta.tables['test_table'])
|
|
|
|
@testing.resolve_artifact_names
|
|
def test_session_bind(self):
|
|
engine = self.metadata.bind
|
|
|
|
for bind in (engine, engine.connect()):
|
|
try:
|
|
sess = create_session(bind=bind)
|
|
assert sess.bind is bind
|
|
f = Foo()
|
|
sess.save(f)
|
|
sess.flush()
|
|
assert sess.query(Foo).get(f.id) is f
|
|
finally:
|
|
if hasattr(bind, 'close'):
|
|
bind.close()
|
|
|
|
@testing.resolve_artifact_names
|
|
def test_session_unbound(self):
|
|
sess = create_session()
|
|
sess.add(Foo())
|
|
self.assertRaisesMessage(
|
|
sa.exc.UnboundExecutionError,
|
|
('Could not locate a bind configured on Mapper|Foo|test_table '
|
|
'or this Session'),
|
|
sess.flush)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
testenv.main()
|