json - 有没有办法如何使用带有 sqlite 后端的 flask_sqlalchemy 保存 json
问题描述
我正在尝试以JSON 的形式保存数据(作为 POST 请求的结果返回)
def get_data(...):
...
try:
_r = requests.post(
_url_list,
headers=_headers
)
return _r.json()
except Exception as ee:
print('Could not get data: {}'.format(ee))
return None
放入SQLITE 数据库中的表作为后端。
def add_to_flight_data(_data):
if _data:
try:
new_record = FlightData(data=_data)
db.session.add(new_record)
db.session.commit()
print('Data instertedto DB!')
return "Success"
except Exception as e:
print('Data NOT instertedto DB! {}'.format(e))
pass
这是我的简单烧瓶代码
import os
import time
import auth
import json
import requests
import datetime
from flask import Flask
from flask_marshmallow import Marshmallow
from flask_sqlalchemy import SQLAlchemy
# from safrs.safrs_types import JSONType
project_dir = os.path.dirname(os.path.abspath(__file__))
database_file = "sqlite:///{}".format(os.path.join(project_dir, "2w.sqlite"))
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = database_file
db = SQLAlchemy(app)
ma = Marshmallow(app)
class FlightData(db.Model):
id = db.Column(db.Integer, primary_key=True)
created = db.Column(db.DateTime, server_default=db.func.now())
json_data = db.Column(db.JSONType, default={})
def __init__(self, data):
self.data = data
似乎可能没有将 JSON 保存在 sqlite 中的选项
json_data = db.Column(db.JSONType, default={})
请告知 谢谢。
解决方案
我相信您应该使用db.JSON
,而不是db.JSONType
因为 sqlalchemy 中没有这样的列类型。
无论如何,SQLite 没有 JSON 数据类型,因此 sqlalchemy 无法将类型列映射db.JSON
到任何内容。根据文档,仅支持 Postgres 和一些 MySQL。在带有JSON1 扩展的 SQLite 中支持 JSON ,但 sqlalchemy 将无法使用它。
那么最好的选择是将列声明为db.Text
并用于json.dumps()
在写入时对数据进行 jsonify。或者修改您的get_data()
函数以检查 JSON 响应(检查Content-type
标头或尝试调用_r.json()
和捕获异常),然后返回_r.content
已经是 JSON 字符串。
用于json.loads()
从数据库中读回数据。
推荐阅读
- javascript - 从 JSON 读取二维数组
- java - 如何在java中将会话存储到磁盘中
- javascript - Vue watch中的代码改变了被监视的数据,导致死循环
- javascript - 没有 hmdEnabled 的 Aframe exitVR() 会导致意外的 z 轴旋转
- jquery - jQuery Validate .valid() 函数不起作用
- node.js - 如何在没有管理员的情况下在 mac 上下载 node.js
- python - 如何使用 MSgraph 处理 webhook 验证请求?
- swift - swapAt 比手动交换操作更快
- python-3.x - 如何使用 Python 调整图像大小以设置特定的兆字节
- wordpress - 如何从 wordpress 中的静态主页中删除帖子?