首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLAlchemy.declarative和延迟的列装载

SQLAlchemy.declarative和延迟的列装载
EN

Stack Overflow用户
提问于 2010-02-18 22:44:38
回答 2查看 1.9K关注 0票数 6

是否可以在SQLAlchemy中指定要延迟加载的一些列?我使用sqlalchemy.ext.declarative模块来定义我的映射,例如:

代码语言:javascript
复制
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class SomeClass(Base):
    __tablename__ = 'some_table'
    id = Column(Integer, primary_key=True)
    name =  Column(String(50))

例如,我希望列名是延迟加载的,我该如何实现呢?

谢谢你,简

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-19 02:59:49

只需在列声明周围添加deferred()

代码语言:javascript
复制
class SomeClass(Base):
    __tablename__ = 'some_table'
    id = Column(Integer, primary_key=True)
    name =  deferred(Column(String(50)))
票数 12
EN

Stack Overflow用户

发布于 2010-02-19 01:47:30

不要为要按需加载的列定义映射。然后使用mapper对象按照Deferred Column Loading中所述配置它们。修改后的代码如下:

代码语言:javascript
复制
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class SomeClass(Base):
    __tablename__ = 'some_table'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    #big_name = Column(String(500))

SomeClass.__table__.append_column(Column('big_name', String(500)))
SomeClass.__mapper__.add_property('big_name', deferred(SomeClass.__table__.c.big_name))

运行此测试代码:

代码语言:javascript
复制
c = session.query(SomeClass).first()
# here SQL is loading all configured properties, but big_name
print "c: ", c
# only here another SQL request is made to load the property
print "big_name: ", c.big_name

生成日志提取:

代码语言:javascript
复制
... INFO sqlalchemy.engine.base.Engine.0x...77d0 SELECT some_table.id AS some_table_id, some_table.name AS some_table_name 
FROM some_table 
LIMIT 1 OFFSET 0

... INFO sqlalchemy.engine.base.Engine.0x...77d0 SELECT some_table.big_name AS some_table_big_name 
FROM some_table 
WHERE some_table.id = ?
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2289401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档