Python 将数据库查询结果导出为日历 JS 的 JSON

Posted

技术标签:

【中文标题】Python 将数据库查询结果导出为日历 JS 的 JSON【英文标题】:Python export Database query result as JSON for Calendar JS 【发布时间】:2022-01-06 10:37:35 【问题描述】:

我正在查询我的数据库,然后将值返回并将它们 JSONIFY 为 JSON 格式,以便“fullcalendar js”可以解析它们并在我的前端显示它们。

我的数据库模型如下:

class database(db.Model):
id = db.Column(db.Integer, primary_key=True)
userid = db.Column(db.Integer, nullable=False)
user = db.Column(db.String(200), nullable=False)
startdate = db.Column(db.String(10), nullable=False)
enddate = db.Column(db.String(10), nullable=False)
duration = db.Column(db.Integer, nullable=False)
approved = db.Column(db.Boolean, nullable=False)

我需要的 JSON 格式是:

[
  
    "title": "Long Event",
    "start": "2014-09-07",
    "end": "2014-09-10"
  
]

我尝试过的(“但失败了!”)

alldata = database.query.filter(database.approved == True).all()

events = "title": [], "start": [], "end": [];

for row in alldata:
    events["title"].append(row.user.strip("[]"))
    events["start"].append(datetime.datetime.strptime(row.startdate,'%d/%m/%Y').strftime('%Y-%m-%d').strip("[]"))
    events["end"].append(datetime.datetime.strptime(row.enddate, '%d/%m/%Y').strftime('%Y-%m-%d').strip("[]"))

# Serializing json
json_object = json.dumps(events, indent=4)
jsontoreturn="["+json_object+"]"
return jsontoreturn

失败的原因是生成的 JSON 格式为:

[
"title": [
    "Ben"
],
"start": [
    "2021-12-29"
],
"end": [
    "2021-12-31"
]
]

如您所见,Dictionary 正在添加 Sqaure 括号,因此 FullCalendar JS (https://fullcalendar.io/docs/events-json-feed) 无法正确解析并失败。

有人有什么想法吗?

【问题讨论】:

【参考方案1】:

我没有能力根据您对alldata 的值进行实际测试,但我怀疑以下方法会起作用:

alldata = database.query.filter(database.approved == True).all()

def process_row(row):
    # func which returns a dictionary like:
    # "title": "Long Event", "start": "2014-09-07", "end": "2014-09-10" 
    return dict (title = row.user.strip("[]"),
                 start = datetime.datetime.strptime(row.startdate,'%d/%m/%Y').strftime('%Y-%m-%d').strip("[]"),
                 end = datetime.datetime.strptime(row.enddate, '%d/%m/%Y').strftime('%Y-%m-%d').strip("[]"),
                 )

# Make a list of dictionaries based on the input, `alldata`
events = [process_row(r) for r in alldata]

那么简单:

json_object = json.dumps(events, indent=4)

return json_object

或者,如果您想使用 Flask 的 jsonify 函数,该函数还设置了 Content-Type 标头:

return jsonify(events)

【讨论】:

这很有效,我感谢 cmets 解释每个步骤的作用。接受为答案! @benfamily2 没有问题。不知道为什么有人反对你的问题,因为它比大多数其他人更符合 SO 要求:显示问题 ✅ 预期输出 ✅ 你尝试了什么 ✅ 输出不正确 ✅。很高兴这对您有用!

以上是关于Python 将数据库查询结果导出为日历 JS 的 JSON的主要内容,如果未能解决你的问题,请参考以下文章

在SQL中如何将查询结果直接导出为EXCEL表格

sql server怎么导出查询结果为脚本

Python:将大型 SQL Server 查询结果导出到 .txt 文件

将mysql的查询结果导出为csv

通过 Google BigQuery API 将查询结果导出为 JSON

Selenium2+python自动化25-js处理日历控件(修改readonly属性)转载