我有这样的功能:
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, 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.append(data_schema)
return empty_list
当前输出:
dbquery(['1','2', '3', '4'], '2020-04-20', '2020-06-20)
预期输出:
[[{'id:1' , 'name' :'XXX' }, {'id:1' , 'name' :'YYY'}, ...], [{'id:2' , 'name' :'XXX' }, {'id:2' , 'name' :'YYY'}, ...], [{'id:3' , 'name' :'XXX' }, {'id:3' , 'name' :'YYY'}, ...], [{'id:4' , 'name' :'XXX' }, {'id:4' , 'name' :'YYY'}, ...]]
注意:
[{'id:1' , 'name' :'XXX' }, {'id:1' , 'name' :'YYY'}, {'id:2' , 'name' :'XXX' }, {'id:2' , 'name' :'YYY'}, {'id:3' , 'name' :'XXX' }, {'id:3' , 'name' :'YYY'}, {'id:4' , 'name' :'XXX' }, {'id:4' , 'name' :'YYY'} ]
答案 0 :(得分:0)
有两种方法可以解决此问题。首先,您要附加列表而不是扩展列表,因此以下内容应适用于该结构:
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, 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))
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
答案 1 :(得分:0)
您是否曾尝试在文件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