• python操作mongodb


    出于对mysql的天然不信任(不了解),准备尝试些新东东,redis是内存数据库有些了解,这回试试更有存储感觉的mongodb

    from pymongo import Connection

    con = Connection()

    connection = pymongo.Connection('localhost', 27017)

    db = con.test # 数据库名为test

    posts = db.post

    2     >>> post1 = {"title":"I Love Python",
     3          "slug":"i-love-python",
     4          "author":"SErHo",
     5          "content":"I Love Python....",
     6          "tags":["Love","Python"],
     7          "time":datetime.datetime.now()}

    一条记录就是一个 {} dic, 内有各种key, 对应value可以是函数值

    posts.insert(post1)

    把记录存入数据库

    post = posts.find ()

    查找所有记录

    post.count()

    得到所有记录数

    posts.find_one({"slug":"python-mongodb"})

    查找一条记录

    posts.update({"_id":post["_id"]},post)

    更新一条记录 post

    1     >>> posts.update({"_id":post["_id"]},{"$set":{"content":"Test Update SET...."}})

    用 $set 更新一条记录里的一个key-value对中的value

    >>> posts.update({"_id":post["_id"]},{"$inc":  {"views":1}})

    $inc 给 记录中的views对应值加1, 如果没有views这个key 就创建,并赋值 1?

    >>> posts.update({"_id":post["_id"]},{"$push":{"tags":"Test"}})

    给数组类型的值append一个值

    2     >>> posts.update({"_id":post["_id"]},{"$addToSet":{"tags":{"$each":["Python","Each"]}}})

    给数组类型的值append一系列值,同时确保不会有重复值

    1        >>> posts.update({"_id":post["_id"]},{"$pop":{"tags":1}})

    将数组类型的值pop出末尾的一个值,如果是{"$pop":{"tags":-1}} 则pop出第一个

    可以使用”$pull”来删除数组中指定的值,它会删除数组中所有匹配的值。如何修改其中的一个值呢?可以先删除掉,再增加一个进去,还有就是直接 定位修改。比如tags数组中,”Python”是第一个,想把它改成”python”,可以通过下标直接选择,就是tags[0],然后使用上面 的”$set”等修改器,如果不确定可以使用$来定位:

    1     >>> posts.update({"tags":"MongoDB"},{"$set":{"tags.$":"Hello"}})

    这个将先搜索tags中满足”MongoDB”的,如果找到,就把它修改为”Hello”。可以看到上面的update这个函数已经有两个参数了, 它还有第3个参数upsert,如果设为”True”,则如果没有找到匹配的文档,就会在匹配的基础上新建一个文档,具体实例就不讲了。

    批量插入

    new_posts = [{"name":"a.payment.FakeInst.a", "family":"FakeInst", "category":"恶意扣费", "behavior":"后台发送扣费短信"}, {"name":"a.payment.Umeng.a", "family":"Umeng", "category":"恶意扣费", "behavior":"1. 后台从服务器端获取指令, 自动发送短信,订制扣费服务,并拦截指定号码短信。 2. 后台从服务器端获取指令,自动模拟访问广告,消耗用户流量"}]

    malinfo.insert(new_posts)


    Out[13]: [ObjectId('527281323387e31671aa91b2'), ObjectId('527281323387e31671aa91b3')]

    创建索引

    1
    2
    3
    >>> from pymongo import ASCENDING, DESCENDING
    >>> posts.create_index([("date", DESCENDING), ("author", ASCENDING)])
    u'date_-1_author_1'
  • 相关阅读:
    LuoguP2763 试题库问题(最大流)
    LuoguP3254 圆桌问题(最大流)
    LuoguP2765 魔术球问题(最大流)
    LuoguP2764 最小路径覆盖问题(最大流)
    LuoguP4016 负载平衡问题(费用流)
    LuoguP2756 飞行员配对方案问题(最大流)
    BZOJ3675: [Apio2014]序列分割(斜率优化Dp)
    BZOJ1814: Ural 1519 Formula 1(插头Dp)
    BZOJ4652: [Noi2016]循环之美(莫比乌斯反演,杜教筛)
    BZOJ4916: 神犇和蒟蒻(杜教筛)
  • 原文地址:https://www.cnblogs.com/yeyong/p/3987962.html
Copyright © 2020-2023  润新知