如何解决如何根据烧瓶中的条件查询所有列
我有这样的功能:
python evaluate.py --checkpoint ./rain_princess.ckpt --in-path image.jpg --out-path ./output_image.jpg
当我执行上面的函数时,它将带有如下参数:
def dbquery(find_by_entry,start_date,end_date):
start_date = str(datetime.strptime(start_date,format('%Y-%m-%d')))
new_end_date = str(datetime.strptime(end_date,format('%Y-%m-%d')) + timedelta(days=1))
data = Analytics.query.filter(Analytics.created_date.between(start_date,new_end_date)).filter_by(id=find_by_entry).order_by(desc('created_date')).all()
data_schema = AnalyticsSchema(many=True).dump(data)
return data_schema
,它将返回以下输出:
dbquery('1','2020-04-20','2020-06-20)
但是如果我为find_by_entry传递多个值,例如:
[{'id:1','name' :'XXX' },{'id:1','name' :'YYY'},...]
我可以将“ data”变量放入循环中,但这是问题,对于“ id:1”,可能有多个记录或单个记录,但是我希望所有内容都在单个列表中:
我已经为满足以上要求尝试了以下代码:
['1','2','3','4']
我正在调用如下函数
def dbquery(find_by_entry,end_date):
empty_list = []
start_date = str(datetime.strptime(start_date,format('%Y-%m-%d')) + timedelta(days=1))
for i in find_by_entry:
data = Analytics.query.filter(Analytics.created_date.between(start_date,new_end_date)).filter_by(id=i).order_by(desc('created_date')).all()
data_schema = AnalyticsSchema(many=True).dump(data)
empty_list.append(data_schema)
return empty_list
当前输出:
dbquery(['1','4'],'2020-06-20)
预期输出:
[[{'id:1',...],[{'id:2',{'id:2',[{'id:3',{'id:3',[{'id:4',{'id:4',...]]
注意:
[{'id:1','name' :'YYY'} ]
解决方法
有两种方法可以解决此问题。首先,您要附加列表而不是扩展列表,因此以下内容应适用于该结构:
def dbquery(find_by_entry,start_date,end_date):
empty_list = []
start_date = str(datetime.strptime(start_date,format('%Y-%m-%d')))
new_end_date = str(datetime.strptime(end_date,format('%Y-%m-%d')) + timedelta(days=1))
for i in find_by_entry:
data = Analytics.query.filter(Analytics.created_date.between(start_date,new_end_date)).filter_by(id=i).order_by(desc('created_date')).all()
data_schema = AnalyticsSchema(many=True).dump(data)
empty_list.extend(data_schema) # Note here
return empty_list
第二件事是,您可以在一个查询中轻松完成所有操作,这是更快,更易于理解和更好的实践:
def dbquery(find_by_entry,end_date):
start_date = str(datetime.strptime(start_date,format('%Y-%m-%d')) + timedelta(days=1))
for i in find_by_entry:
data = Analytics.query.filter(
Analytics.created_date.between(start_date,new_end_date),Analytics.id.in_(find_by_entry)
).order_by('id',desc('created_date')).all()
data_schema = AnalyticsSchema(many=True).dump(data)
return data_schema
,
您是否曾尝试在文件analytics_schema中添加更多需要返回的字段?在文件analytics_schema中如下所示:
class AnalyticsSchema(Schema):
class Meta:
strict = True
ordered = True
id = fields.Int()
name = fields.String()
analytics_schema = AnalyticsSchema()
然后可以这样使用:
analytics_schema.dump(data).data
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。