【问题标题】:SQLAlchemy declarative. Specify columns to selectSQLAlchemy 声明式。指定要选择的列
【发布时间】:2018-09-16 01:37:15
【问题描述】:

声明式基础:

Base = declarative_base()
Base.query = Session.query_property()

班级:

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

现在我可以从作弊中得到一切:

Cheat.query.all()

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

SELECT name, slug, cheat, html FROM cheats

但我希望我的 SQL 语句是:

SELECT name, slug FROM cheats

所以我需要指定我想要检索哪些列,因为我真的不需要通过网络从数据库中提取大量文本。 我该怎么做?

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    将它们定义为deferred,那么它们只有在被访问时才会被获取

    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)))
    

    【讨论】:

      【解决方案2】:
      for name, slug in session.query(Cheat.name, Cheat.slug):
          print name, slug
      

      【讨论】:

        猜你喜欢
        • 2011-10-10
        • 2013-02-20
        • 1970-01-01
        • 1970-01-01
        • 2012-10-19
        • 2012-06-13
        • 1970-01-01
        • 2012-01-01
        • 2010-09-20
        相关资源
        最近更新 更多