使用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'
答案 0 :(得分:0)
我找到了解决方案。我将查询更改为raw()而不是.select并输入错误。