首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQLAlchemy声明性。指定要选择的列

SQLAlchemy声明性。指定要选择的列
EN

Stack Overflow用户
提问于 2012-05-01 01:12:27
回答 2查看 1.4K关注 0票数 2

声明性基础:

代码语言:javascript
运行
复制
Base = declarative_base()
Base.query = Session.query_property()

类:

代码语言:javascript
运行
复制
class Cheat(Base):

  __tablename__ = 'cheats'

  id = Column(Integer, primary_key = True, autoincrement = True)
  cheat = Column(Text)
  name = Column(String(255), index = True)
  _html = Column('html', Text)
  _slug = Column('slug', String(255))

  @hybrid_property
  def html(self):
    return self._html

  @html.setter
  def set_html(self, md):
    from markdown import markdown
    self._html = markdown(md)

  @hybrid_property
  def slug(self):
    return self._slug

  @slug.setter
  def set_slug(self, name):
    self._slug = slugify(name)

  def __init__(self, name, cheat):
    self.name = name
    self.slug = name
    self.cheat = cheat
    self.html = cheat

  def __repr__(self):
    return "Cheat<%s>" % self.name

现在我可以从作弊的人那里得到一切了:

代码语言:javascript
运行
复制
Cheat.query.all()

SQLAlchemy将生成类似如下的SQL语句:

SELECT name, slug, cheat, html FROM cheats

但是我希望我的SQL语句是:

SELECT name, slug FROM cheats

因此,我需要指定要检索哪些列,因为我实际上不需要通过网络从数据库中提取大量文本。我该怎么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-01 01:44:22

将它们定义为deferred,然后只有在访问时才会获取它们

代码语言:javascript
运行
复制
from sqlalchemy.orm import deferred

class Cheat(Base):

  __tablename__ = 'cheats'

  id = Column(Integer, primary_key = True, autoincrement = True)
  cheat = deferred(Column(Text))
  name = Column(String(255), index = True)
  _html = Column('html', Text)
  _slug = deferred(Column('slug', String(255)))
票数 5
EN

Stack Overflow用户

发布于 2012-11-24 06:58:13

代码语言:javascript
运行
复制
for name, slug in session.query(Cheat.name, Cheat.slug):
    print name, slug
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10387697

复制
相关文章

相似问题

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