在python中将JSON存储到数据库中

nml*_*nml 7 python json

我定期从API中获取一些数据,并希望将JSON数据存储到数据库中以便以后访问和使用.

从API,我每次都会在此示例中获取数据:

'{"data": {"cursor": null, "files": {"nodes": [{u'code': u'BOPhmYQg5Vm', u'date': 1482244678,u'counts': 2, u'id': u'1409492981312099686'}, {u'code': u'g5VmBOPhmYQ', u'date': 1482244678,u'counts': 5, u'id': u'1209968614094929813'}]}}}'
Run Code Online (Sandbox Code Playgroud)

我可以json_data = json.loads(above_data)然后获取,nodes因为nodes_data = json_data["data"]["files"]["nodes"]它给出了一个列表nodes.

我想将此nodes数据存储到类型的DB列data = Column(db.Text)Text.每次节点列表中将有10-15个值.

我该如何存储?有多个nodes,我需要它的方式,以后我可以追加/添加更多我的数据库中nodes已有的data列.

虽然我想这样做json.loads(db_data_col),我得到有效的json,并可以遍历所有内容nodes数据并在以后使用.

我对如何存储在db中以及稍后以有效的json格式访问感到困惑.

编辑1:使用Sqlite进行测试.以后可以使用PostgresSQL.Text列的类型是要点.

nae*_*ael 5

如果您使用的是 Django 1.8,您可以创建自己的模型字段来存储 json。该课程还将确保您拥有正确的 JSON 格式。

import json
from django.db import models

class JsonField(models.TextField):
    """
    Stores json-able python objects as json.
    """
    def get_db_prep_value(self, value, connection, prepared=False):
        try:
            return json.dumps(value)
        except TypeError:
            BAD_DATA.error(
                "cannot serialize %s to store in a JsonField", str(value)
            )
            return ""

    def from_db_value(self, value, expression, connection, context):
        if value == "":
            return None
        try:
            return json.loads(value)
        except TypeError:
            BAD_DATA.error("cannot load dictionary field -- type error")
            return None
Run Code Online (Sandbox Code Playgroud)


nml*_*nml 2

我找到了一种将 JSON 数据存储到数据库中的方法。由于我nodes从远程服务进行访问,该服务会list在每个请求上返回节点,因此我需要构建适当的 json 来从数据库存储/检索。

假设 API 返回的 json 文本为:'{"cursor": null, "nodes" = [{"name": "Test1", "value: 1}, {"name": "Test2", "value: 2}, ...]}'

因此,首先我们需要访问节点列表:

data = json.loads(api_data)
nodes = data['nodes']
Run Code Online (Sandbox Code Playgroud)

现在,对于第一次进入数据库列,我们需要执行以下操作:

str_data = json.dumps({"nodes": nodes})

因此,str_data将返回一个有效的字符串/缓冲区,我们可以使用"nodes"密钥将其存储到数据库中。

对于第二个或连续的数据库列条目,我们将执行以下操作:

# get data string from DB column and load into json
db_data = json.loads(db_col_data)
# get new/latest 'nodes' data from api as explained above
# append this data to 'db_data' json as
latest_data = db_data["nodes"] + new_api_nodes
# now add this data back to column after json.dumps()
db_col_data = json.dumps(latest_data)
# add to DB col and DB commit
Run Code Online (Sandbox Code Playgroud)

这是从数据库加载/转储数据同时添加/删除 json 并保持正确格式的正确方法。

谢谢!