Python flask-sqlalchemy - windows函数查询错误?

时间:2016-01-08 20:07:31

标签: python sqlite flask flask-sqlalchemy

我试图使用Windows函数,这样我最终可以从每个eternal_id中获取最后一个结果,并且只是试图让Windows函数工作而陷入困境。我看到错误是否连接到引擎并从中进行选择,或者从中启动会话和查询。

这是我尝试的内容("启动会话并从中查询"方法):

engine = create_engine('sqlite:///../../app.db')
sessionfactory = sessionmaker(bind=engine)
s = sessionfactory()

myquery = s.query(models.case.id, 
                  models.case.eternal_id,
                  func.count().over(
                      partition_by=models.case.eternal_id).label('cnt'))
print myquery.all()

这是我得到的错误:

OperationalError: (sqlite3.OperationalError) near "(": syntax error [SQL:    
u'SELECT "case".id AS case_id, "case".eternal_id AS case_eternal_id, 
count(*) OVER (PARTITION BY "case".eternal_id) AS cnt \nFROM "case"']

如果我从查询中删除func.count().over(partition_by=models.case.eternal_id).label('cnt'),一切都会完美运行。任何人都知道我为什么会收到错误?

这是模型,如果它有帮助:

from app import db
class case(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    eternal_id = db.Column(db.Integer, db.ForeignKey('case_eternal.id'))
    eternal = db.relationship('case_eternal', back_populates='case_sids')
    def __repr__(self):
        return '<Case %r>' % (self.id)

class case_eternal(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    case_sids = db.relationship('case', back_populates='eternal')

2 个答案:

答案 0 :(得分:1)

SQLite没有窗口函数。

答案 1 :(得分:0)

更新:现在支持窗口功能

对于那些登陆这里的人来说,自从提出并回答这个问题以来,情况已经发生了变化。 window functions(2018-09-15)的SQLite支持已添加到3.25.0

文档:https://www.sqlite.org/windowfunctions.html
发布历史记录:https://www.sqlite.org/changes.html#version_3_25_0