Python SQLAlchemy子查询列表对象没有属性

Python SQLAlchemy子查询列表对象没有属性,python,sqlalchemy,Python,Sqlalchemy,喂?我试图在SQLAlchemy中编写一个查询(有两个子查询),但得到一个错误AttributeError:“list”对象没有属性“l_date” 这是我的密码: import sqlalchemy as db from sqlalchemy import func from sqlalchemy import desc from sqlalchemy.orm import sessionmaker from sqlalchemy import or_ from sqlalchemy impo

喂?我试图在SQLAlchemy中编写一个查询(有两个子查询),但得到一个错误AttributeError:“list”对象没有属性“l_date”

这是我的密码:

import sqlalchemy as db
from sqlalchemy import func
from sqlalchemy import desc
from sqlalchemy.orm import sessionmaker
from sqlalchemy import or_
from sqlalchemy import and_
from sqlalchemy.sql.expression import  alias

try:

    engine = db.create_engine('postgresql://user:pass@localhost:5432/db_name')
    connection = engine.connect()

except:
    print('Error establishing DB connection')

# Import metadata
metadata = db.MetaData()

# create a configured "Session" class
Session = sessionmaker(bind=engine)

# create a Session
session = Session()

# Import articles, authors and log tables
log = db.Table('log', metadata, autoload=True, autoload_with=engine)


def days_with_request_errors():
    query1 = db.select([func.DATE(log.columns.time).label('l_date'), func.count(log.columns.status).label('s_count')]) \
        .where(or_(log.columns.status.like('%5%'), log.columns.status.like('%4%'))) \
        .group_by(func.DATE(log.columns.time))

    ResultProxy = connection.execute(query1)
    q1 = ResultProxy.fetchall()

    query2 = db.select([func.DATE(log.columns.time).label('l_date'),
                          func.count(log.columns.status).label('s_count')]) \
        .group_by(func.DATE(log.columns.time))

    ResultProxy = connection.execute(query2)
    q2 = ResultProxy.fetchall()

    main_query = db.select([q1.l_date, (q1.s_count * 100) / q2.s_count]) \
        .where(q1.l_date == q2.l_date) \
        .where(and_((q1.c.s_count * 100) / q2.c.s_count) > 1)

    ResultProxy = connection.execute(main_query)
    return ResultProxy.fetchall()
下面是我正在转换到SQLAlchemy的原始SQL查询。(原始查询工作正常):


任何帮助都将不胜感激。

我发现了问题所在。子查询缺少别名。为了使其正常工作,我对子查询进行了如下修改:

query1 = db.select([func.DATE(log.columns.time).label('l_date'), func.count(log.columns.status).label('s_count')]) \
        .where(or_(log.columns.status.like('%5%'), log.columns.status.like('%4%'))) \
        .group_by(func.DATE(log.columns.time)).alias('query1')


    query2 = db.select([func.DATE(log.columns.time).label('l_date'),
                          func.count(log.columns.status).label('s_count')]) \
        .group_by(func.DATE(log.columns.time)).alias('query2')

实际上,您已经执行了这些查询,并试图将结果用作子查询,就是这样。那么@IljaEverilä出错的原因是什么呢?我该怎么办?我现在没有办法测试这个问题,但是我很确定如果你用
query1
替换
q1
,用
query2
替换
q2
,那就行了。@themanatuf替换得到同样的错误=>AttributeError:'Select'对象没有属性'l_date'。。。看起来我的别名l_date和s_count不在查询结果中。同样,单独执行子查询将返回预期结果。请阅读,并查看它们是否有帮助。
query1 = db.select([func.DATE(log.columns.time).label('l_date'), func.count(log.columns.status).label('s_count')]) \
        .where(or_(log.columns.status.like('%5%'), log.columns.status.like('%4%'))) \
        .group_by(func.DATE(log.columns.time)).alias('query1')


    query2 = db.select([func.DATE(log.columns.time).label('l_date'),
                          func.count(log.columns.status).label('s_count')]) \
        .group_by(func.DATE(log.columns.time)).alias('query2')