Python SQLAlchemy子查询列表对象没有属性
喂?我试图在SQLAlchemy中编写一个查询(有两个子查询),但得到一个错误AttributeError:“list”对象没有属性“l_date” 这是我的密码: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
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')