Python peewee mysql内连接别名难度

时间:2018-01-26 23:11:26

标签: python mysql peewee

使用PHP和标准MySQL,我有一个这样的查询:

#SELECT AGCs.name AS agcname, npa, nxx, COUNT( npa ) AS ooscount
#          FROM MTAs
#          INNER JOIN AGCs ON AGCs.id = MTAs.agcid
#          WHERE agcid = agcid
#          GROUP BY npa, nxx
#          ORDER BY  `ooscount` DESC

这很好用,经过phpMyadmin测试,后来在我的前端测试。

现在,我正在重构一堆我的代码以进行优化等,并且无法在Python / Peewee中使用此查询。

cquery = Agcs.select(Agcs.name.alias('agcname'), Mtas.npa.alias('npa'), Mtas.nxx.alias('nxx'), fn.COUNT(Mtas.npa).alias('npaooscount')).join(Mtas, JOIN.INNER, on=(Agcs.id == Mtas.agcid)).where(Mtas.agcid == agcid).group_by(Mtas.npa, Mtas.nxx).order_by(Mtas.ooscount)

对于我的生活,我无法弄清楚为什么它不喜欢order by clause。

  File "testing_join.py", line 69, in <module>
    cquery = Agcs.select(Agcs.name.alias('agcname'), Mtas.npa.alias('npa'), Mtas.nxx.alias('nxx'), fn.COUNT(Mtas.npa).alias('npaooscount')).join(Mtas, JOIN.INNER, on=(Agcs.id == Mtas.agcid)).switch(Mtas).where(Mtas.agcid == agcid).group_by(Mtas.npa, Mtas.nxx).order_by(npaooscount)
NameError: name 'npaooscount' is not defined

虽然Mtas.ooscount确实不存在,但我在查询的前面将其设置为别名。

如果您需要查看结构

,以下是我的模型
class Agcs(BaseModel):
    alert = IntegerField()
    diff = CharField()
    diff_ooscount = CharField()
    name = CharField()
    ooscount = IntegerField()
    runtime = CharField()
    updated = DateTimeField()

    class Meta:
        table_name = 'AGCs'

class Mtas(BaseModel):
    ad = CharField()
    agcid = IntegerField()
    as_ = CharField(column_name='as')
    dn = CharField()
    fqdn = CharField()
    npa = CharField()
    nxx = CharField()
    ps = CharField()
    timestamp = DateTimeField()

    class Meta:
        table_name = 'MTAs'

我在这里做错了什么?

我尝试了Mtas.npa.npaooscount,这给出了不同的错误。

ValueError:基数为10的int()的无效字面值:'Mtas.npa.npaooscount'

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我将查询更改为raw()而不是.select并输入错误。