SQLAlchemy - 将ResultProxy映射到没有会话的映射类

时间:2011-11-04 18:47:32

标签: sqlalchemy

我非常希望在查询session时避免状态绑定到实体,并在不依赖的情况下利用类映射:

session.query(SomeClass)

我不需要交易,急切/延期加载,更改跟踪或任何其他功能。基本上我想手动将ResultProxy绑定到映射的类,并且有一个没有任何SQLA引用的实例列表(例如state)。

我尝试过Query.instances,但它需要一个会话实例:

engine = create_engine('sqlite:///:memory:')
meta = MetaData()
meta.bind = engine
table = Table('table, meta,
    Column('id', Integer, primary_key=True),
    Column('field1', String(16), nullable=False),
    Column('field2', String(60)),
    Column('field3', String(20), nullable=False)
)

class Table(object)
    pass

meta.create_all(checkfirst=True)
for i in range(10):
    user.insert({'field1': 'field1'+i,'field2': 'field2'+i*2,'field3': 'field3'+i*4})
mapper(Table, table)
query = Query((Table,))
query.instances(engine.text("SELECT * FROM table").execute())

结果:

Traceback (most recent call last):
    File "sqlalchemy/orm/mapper.py", line 2507, in _instance_processor
        session_identity_map = context.session.identity_map
    AttributeError: 'NoneType' object has no attribute 'identity_map'

我在这一点上陷入困​​境。我查看了Query.instances,并且复制会话的手动设置似乎非常广泛。它需要QueryQueryContext_MapperEntity以及精心设计的编舞,这会让大多数芭蕾舞团都感到脸红。

tl; dr 想要使用SQLAlchemy的查询生成(返回ResultProxy实例的任何内容)并将结果映射到各自的类,同时跳过与session有关的任何内容, identity_map&工作单位。

1 个答案:

答案 0 :(得分:0)

你可以清除对象,因此它不会维护会话,但它仍然具有_sa属性。

看到它已经有一段时间了,因为你问过,它可能不会为你服务,但也许对别人有用