簡體   English   中英

對半列Sqlalchemy執行排序

[英]Performing Sort on half Column Sqlalchemy

我有一個實體(表)名稱程序,在程序中有一個字段(列)會話。 會話是一個字符串字段,其存儲方式如下。 2011年-秋季

我只想按年份排序。 這可能嗎。 我正在使用sqlalchemy。

請參閱有關SQL and Generic Functions文檔。 對於postgres它是一個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()
)

您可以使用desc()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條目。然后運行一個簡單的查詢,以降序返回所有這些數據。 前幾行在此答案的頂部。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM