zoukankan      html  css  js  c++  java
  • python 数据库编程(mongoDB)

       mongoDB是一个基于分布式文件存储的数据库,介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。关系型数据库遵循原子性,一致性,独立性,持久性规则,而非关系型数据库不需要固定的模式,无需多余的操作就可以横向扩展。

      1.  在官网下载安装mongodb数据库  

        https://www.mongodb.com/download-center?jmp=nav#community

      2.  在命令行中启动服务器控制台

        mongod.exe --nojournal --dbpath .     无日志,保存与当前路径,切换到安装目录下的bin目录中启动

      3.  启动客户端

        mongo.exe

      4.  常用操作

        use test                 #切换数据库,使用test数据库
        db.blogg.insert({'id':1,'title':'myblog'})                   #向当前数据库blogg表中插入文档
        db.blogg.find()                      #查询当前数据库blogg表中的文档
        db.blogg.find({'id':1})
        db.blogg.findOne()
        db.blogg.update({'id':2},{'$set':{'title':'yourBlog'}})               #使用$set修改指定键值对
        db.blogg.update({'id':2},{'$set':{'title-2':'yourBlog'}})               #如果键值不存在则使用$set增加指定键值对
        db.blogg.update({'id':2},{'$unset':{'title-2':'yourBlog'}})         #使用$unset取消指定键值对
        db.blogg.update({'id':2},{'$inc':{'id':1}})                       #增减指定键的值,id=3
        db.blogg.update({'id':4},{'$set':{'size':4}},true)            #第三个参数为true,无则创建,有匹配更新
        db.blogg.update({'id':1},{'$set':{'commet':'mm'}},false,true)         #第四个参数为true,更新多个匹配文档
        db.blogg.remove({'id':4})           #删除指定的文档
        show dbs        #显示所有数据库
        show collections          #显示所有的集合
        db.blog.drop()                #删除blog这个集合
        db.dropDatabase()          #删除数据库

      5.  python连接mongodb,安装连接mongo的驱动,pip install pymongo

    >>> import pymongo
    >>> pymongo.version
    '3.5.1'
    >>> mc = pymongo.MongoClient()  #连接数据库
    >>> db_proj = mc.proj  #指定数据库
    >>> col_stud = db_proj.stud  #指定集合
    >>> adoc = {'id':1,'name':'mike','age':12,'parents':['green','john']}
    >>> col_stud.insert_one(adoc)   #插入文档
    <pymongo.results.InsertOneResult object at 0x0000023B9A5C2848>
    >>> col_stud.find_one()  ##查询
    {'name': 'mike', '_id': ObjectId('59d5ce9c5dc75f55d0389247'), 'id': 3, 'age': 15}
    >>> col_stud.update_one({'name':'mike'},{'$set':{'age':11}})  #更新
    <pymongo.results.UpdateResult object at 0x0000023B9A5DC848>
    >>> col_stud.find_one({'name':'mike'})['age']
    11
    >>> col_stud.replace_one({'name':'mike'}, {'id':3,'name':'mike','age':15})  #替换
    <pymongo.results.UpdateResult object at 0x0000023B9A5DC908>
    >>> for doc in col_stud.find({'id':3}):
        print(doc['id'],doc['name'],doc['age'])
    
        
    3 mike 15
    3 mary 13

      6.  mongoengine,安装pip install mongoengine

    >>> from mongoengine import *
    >>> connect('test')
    MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True, read_preference=Primary())
    >>> class User(Document):
        uid = SequenceField(primary_key=True)
        name = StringField(null=True,required=True)
        age = IntField(min_value=6,max_value=16)
        weight = FloatField(max_value=60)
    >>> u = User()
    >>> u.name = 'mary'
    >>> u.age = 11
    >>> u.weight=30.7
    >>> u.save()
    <User: User object>
    >>> ua = User(name='honey',age=13,weight=28.9)
    >>> ua.save()
    <User: User object>
    >>> u.id
    3
    >>> ua.id
    4
    >>> u.update(age=14)
    1
    >>> u.reload()   # #先reload(),后访问
    <User: User object>
    >>> u.age
    14
    >>> u.update(inc__age=2) # #使用自增
    1
    >>> u.reload()
    <User: User object>
    >>> u.age
    16
    >>> u.delete()  #删除数据,数据依然存在与内存中,但是在数据库中已不存在
    >>> User.objects
    [<User: User object>, <User: User object>, <User: User object>]
    >>> User.objects[0]
    <User: User object>
    >>> for item in User.objects:
        print(item.name,item.age,item.weight)
    
        
    Jone 13 32.5
    Mike 12 30.5
    honey 13 28.9
    >>> User.objects.count()
    3
    >>> len(User.objects)
    3

      7.  mongodbengine查询

        >>> class User(Document):
                userid = SequenceField(primary_key=True)
                name = StringField(max_length=20)
                age = IntField(min_value=6,max_value=17)
                weight = FloatField(max_value=60)
        
                
        >>> users_data = [{"name":"Mike","age":12,"weight":30.5},]
        >>> users_data = [{"name":"Mike","age":12,"weight":30.5},{"name":"Jone","age":13,"weight":32.5},{"name":"lily","age":12,"weight":34.5},{"name":"lisa","age":12,"weight":31.8}]
        >>> for d in users_data:
            User(**d).save()                                 #字典对象
        
            
        <User: User object>
        <User: User object>
        <User: User object>
        <User: User object>
        >>> for d in User.objects:
              print(d.userid,d.name,d.age,d.weight)
        
            
        2 Jone 13 32.5
        1 Mike 12 30.5
        3 lily 12 34.5
        4 lisa 12 31.8
        >>> User.objects.sum('age')
        49
        >>> User.objects.sum('age') / User.objects.count()
        12.25
        >>> User.objects(age__lt=13).sum('weight')
        96.8
        >>> User.objects .average('age')
        12.25
        >>> User.objects.distinct('age')              #distinct(),去重
        [13, 12]
        >>> d = User.objects(age=12).only('name').first()             #only(),只包含'name'
        >>> d.userid
        1
        >>> d.name
        'Mike'
        >>> d.age
        >>> d.weight
        >>> d = User.objects(age=12).exclude('name').first()           #exclude(),只去除'name'
        >>> d.userid
        1
        >>> d.name
        >>> d.age
        12
        >>> d.reload()                                       #使用reload()重新加载
        <User: User object>
        >>> d.name
        'Mike'
        >>> d = User.objects(age=12).exclude('name').all_fields().first()                    #all_fields(),所有值
        >>> d.userid 
        1
        >>> d.name
        'Mike'
        >>> d.age
        12
        >>> d.weight
        30.5
        >>> for d in User.objects(weight__gt=31):                    #gt         大于
              print(d.userid,d.name,d.age,d.weight)
        
            
        2 Jone 13 32.5
        3 lily 12 34.5
        4 lisa 12 31.8
        >>> for d in User.objects(weight__ne=31):                  #ne         不等于
              print(d.userid,d.age,d.name,d.weight)
        
            
        2 13 Jone 32.5
        1 12 Mike 30.5
        3 12 lily 34.5
       4 12 lisa 31.8

      8. 一对一关系,使用ReferenceField建立一对一关联关系

        >>> class Waiter(Document):
              name = StringField(max_length=20)
              custom = ReferenceField(User)                    #使用ReferenceField建立一对一关联关系
        
            
        >>> w = Waiter()
        >>> w.name = 'Wtr A'
        >>> w.custom = d
        >>> w.save()
        <Waiter: Waiter object>
        >>> w = Waiter.objects.first()
        >>> w.name
        'Wtr A'
        >>> w.custom.name
        'lisa'
        >>> w.custom.age
        12

      9.  一对多

    >>> class Member(EmbeddedDocument):
        name = StringField(max_length=20)
        
    >>> class Team(Document):
        name = StringField(max_length=30)
        members = ListField(EmbeddedDocumentField(Member))
        
    >>> ma = Member(name='Lisa')
    >>> mb = Member(name='Mike')
    >>> t = Team(name='victory',members=[ma,mb])
    >>> t.save()
    <Team: Team object>
    >>> t = Team.objects[0]
    >>> for m in t.members:
        print(m.name)
    
        
    Lisa
    Mike

      10.  对文件读写

    >>> class Uf(Document):
          name = StringField()
          photo = FileField()
        
    >>> fp = open(r'C:Userswl18883Desktoppythonpython DB	est.jpg','rb')
    >>> uf = Uf(name='Lisa')
    >>> uf.photo.put(fp,content_type='image/jpeg')
    >>> uf.save()
    <Uf: Uf object>
    >>> fp.close()
    >>> p = Uf.objects[0].photo.read()
    >>> fp = open(r'C:Userswl18883Desktoppythonpython DB
    icai.jpg','wb+')
    >>> fp.write(p)
    45191
    >>> fp.close()
  • 相关阅读:
    Raspberry pi raspbain source mirror
    Raspberry pi 定时天气播报
    Raspberry pi 2 wireless settings.
    MATLAB 图像处理-线性变换和直方图均衡
    求向量组的等价正交单位向量组-施密特正交化 C 语言 算法
    矩阵的逆 C 语言 算法二
    矩阵的逆 C 语言 算法一
    线性方程组 解的判别 与解的结构
    How to install .bundle packages in Ubuntu?
    C 语言期中考试 程序分析
  • 原文地址:https://www.cnblogs.com/homle/p/8833911.html
Copyright © 2011-2022 走看看