• 【TinyDB】玩数据


    TinyDB -数据处理

    1、新增字段

    一次增加一条: insert({'for':'bar'}) 

    一次增加多条: insert_mutiple([{...},{...},...]) 

    2、更新字段

    对已经存在的字段进行数据处理。有1+6+X 种方法:

    1: update({key:value})

    6: update(tinydb_func(key或者key,value),query)

    *** tinydb_func是便于理解,不是真的存在的函数。6种如下:

       #  delete(key):删除key对应的键值对

       #  increment(key):key对应的value +1,仅数字

       #  decerement(key):key对应的value -1,仅数字

       #  add(key, val):key对应的value + val,可以操作字符串

       #  subtract(key, val):key对应的value - val, 仅数字

       #  set(key, val):设置key的value = value,任意类型

    from tinydb import TinyDB
    from tinydb import Query
    
    db = TinyDB('data.json')
    db.insert_multiple([
        {'name':'a'},
        {'name':'b'},
        {'name':'c'},
        {'name':'d'},
        {'name':'e'},
        {'name':'f'},
    ])
    print(db.all())  # 
    db.update({'age':10})
    print(db.all())  # 每个字段里面都增加了同样的新键值对
    # [{'name': 'a', 'age': 10}, {'name': 'b', 'age': 10},
      {'name': 'c', 'age': 10}, {'name': 'd', 'age': 10},
    {'name': 'e', 'age': 10}, {'name': 'f', 'age': 10}]
    from tinydb.operations import delete from tinydb.operations import increment,decrement from tinydb.operations import add, subtract, set User = Query() db.update(delete('age'),User.name == 'a') # {'name': 'a'} -->直接删除了'age':10 db.update(increment('age'), User.name == 'b') # {'name': 'b', 'age': 11} -->10+1 db.update(decrement('age'), User.name == 'c') # {'name': 'c', 'age': 9} -->10-1 db.update(add('age',5), User.name == 'd') # {'name': 'd', 'age': 15} -->10+5 db.update(subtract('age',5), User.name == 'e') # {'name': 'e', 'age': 5} -->10-5 db.update(set('age',100), User.name == 'f') # {'name': 'f', 'age': 100} -->100 for filed in db.all(): print(filed)

    X:自定义方法,可以按照下面的格式要求写自己的逻辑:

    def my_func(args):
        def transform(doc):  #这两行不要改
            # 业务逻辑
            # ...
        return transform     #这两行不要改
    db.update(my_func(args),query)

     3、更新插入

     更新数据后再插入,直接使用 update({...},query) 

    db.upsert({'name':'a','logger-in': True}, User.name == 'a')
    db.upsert({'name':'b','age': 200},User.name == 'b')

    4、获取数据

      len( db) :获取表的长度,返回里面有多少个字段,或者doc--> { ... }

      db.get( query) :返回符合 query条件的字段 { ...},这里和search不一样,search返回是字段列表[ { ... } , { ... } ]

      db.contains( query) :判断包含有 符合 query条件的字段存在,返回True 和 False

      db.count( query) :返回符合条件的字段数量

    a = len(db)
    b = db.get(User.name == 'a')
    c = db.contains(User.name == 'a')
    d = db.count(User.name == 'a')
    print(a) #11
    print(b) # {'name': 'a', 'logger-in': True}
    print(c) #True
    print(d) # 1

    5、替换数据

     对现有的字段进行替换用: write_back(doc) 

    这里的doc通过print()打印出来都是字典的样子,但是它比字典了下多了 .doc_id 的属性。

    from tinydb import TinyDB,Query
    # 初始化一个TinyDB文件,生成json文件
    db = TinyDB('test_write.json')
    db.insert_multiple({'name':'a','age':i} for i in range(5))
    
    User = Query()
    docs = db.search(User.name == 'a')
    db.write_back(docs)  # 将新的字段写入到json文件。
    print(db.all())

    运行结果:

    [{'name': 'a', 'age': 100}, 
    {'name': 'a', 'age': 100}, 
    {'name': 'a', 'age': 100}, 
    {'name': 'a', 'age': 100},
    {'name': 'a', 'age': 100}]

    可以尝试用下面的例子去试下 write_back() 方法。

    doc_new = {'name':'aaa','age':111}
    db.write_back(doc_new)

    报错:AttributeError: 'str' object has no attribute 'doc_id'

    for doc in docs:
        print(doc.doc_id) #1、2、3、4、5

    所以, white_back() 操作的是带有 doc_id 属性的某个对象,而不能直接对字典形式的字段进行写入,要写就用 insert() 。

    6、记住这种表

    Inserting data
    db.insert_multiple(...) Insert multiple documents
    Updating data
    db.update(operation, ...) Update all matching documents with a special operation
    db.write_back(docs) Replace all documents with the updated versions
    Retrieving data
    len(db) Get the number of documents in the database
    db.get(query) Get one document matching the query
    db.contains(query) Check if the database contains a matching document
    db.count(query) Get the number of matching documents

     

    上一节:TinyDB(查询)

    下一节:TInyDB(其他知识点)

     

  • 相关阅读:
    SQL 分页存储
    ubuntu下删除openjdk,改用sun jdk
    LCD 驱动的整体分析。
    关于IT行业人员吃的都是青春饭?[透彻讲解]
    【转载】I.MX25上摄像头调试总结
    wifi 移植
    函数指针的透彻分析
    关于module_param()宏 (转)
    problem with aptget update ubuntu 11.10
    YUV 格式讲解
  • 原文地址:https://www.cnblogs.com/watalo/p/12392518.html
Copyright © 2020-2023  润新知