对半列 Sqlalchemy 执行排序
Performing Sort on half Column Sqlalchemy
我有一个实体 (Table) 名称程序,在程序中有一个字段(列)会话。会话是一个字符串字段,按以下方式存储。
2011 - 秋季
我只想按年份排序。这可能吗。我正在使用 sqlalchemy。
您可以使用 desc()
or asc()
方法进行排序。由于您的字符串格式为 YEAR - SEASON
,这将对您的数据进行排序(假设降序):
2019 - Spring
2019 - Fall
2018 - Spring
2018 - Fall
2017 - Spring
2017 - Fall
2016 - Spring
2016 - Fall
2015 - Spring
2015 - Fall
2014 - Spring
2014 - Fall
...
这可以通过以下示例看出:
from sqlalchemy import Column, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class Program(Base):
__tablename__ = 'program'
session = Column(String(250), primary_key=True)
engine = create_engine('sqlite:///program.db')
Base.metadata.create_all(engine)
Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine)
session = DBSession()
for x in range(2000, 2020):
session.add(Program(session="{} - Fall".format(x)))
session.add(Program(session="{} - Spring".format(x)))
session.commit()
programs = session.query(Program).order_by(Program.session.desc()).all()
for x in programs:
print x.session
这将为 2000 年到 2019 年之间的每一年创建一个 <Year> - Fall
和 <Year> - Spring
条目。然后它运行一个简单的查询,要求按降序返回所有这些数据。前几行位于此答案的顶部。
请参阅 SQL and Generic Functions
. For postgres
it is a substring
函数的文档,该函数用于从字符串中删除前 7 个字符。最终查询可能如下所示:
from sqlachemy import func
expr = func.substring(Program.session, 8) # for postgresql
programs = (
session.query(Program, expr.label("season"))
.order_by(expr.desc())
.all()
)
我有一个实体 (Table) 名称程序,在程序中有一个字段(列)会话。会话是一个字符串字段,按以下方式存储。 2011 - 秋季
我只想按年份排序。这可能吗。我正在使用 sqlalchemy。
您可以使用 desc()
or asc()
方法进行排序。由于您的字符串格式为 YEAR - SEASON
,这将对您的数据进行排序(假设降序):
2019 - Spring
2019 - Fall
2018 - Spring
2018 - Fall
2017 - Spring
2017 - Fall
2016 - Spring
2016 - Fall
2015 - Spring
2015 - Fall
2014 - Spring
2014 - Fall
...
这可以通过以下示例看出:
from sqlalchemy import Column, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class Program(Base):
__tablename__ = 'program'
session = Column(String(250), primary_key=True)
engine = create_engine('sqlite:///program.db')
Base.metadata.create_all(engine)
Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine)
session = DBSession()
for x in range(2000, 2020):
session.add(Program(session="{} - Fall".format(x)))
session.add(Program(session="{} - Spring".format(x)))
session.commit()
programs = session.query(Program).order_by(Program.session.desc()).all()
for x in programs:
print x.session
这将为 2000 年到 2019 年之间的每一年创建一个 <Year> - Fall
和 <Year> - Spring
条目。然后它运行一个简单的查询,要求按降序返回所有这些数据。前几行位于此答案的顶部。
请参阅 SQL and Generic Functions
. For postgres
it is a substring
函数的文档,该函数用于从字符串中删除前 7 个字符。最终查询可能如下所示:
from sqlachemy import func
expr = func.substring(Program.session, 8) # for postgresql
programs = (
session.query(Program, expr.label("season"))
.order_by(expr.desc())
.all()
)