java程序员的python之路(mongodb)

17 篇文章 4 订阅
9 篇文章 1 订阅

创建mongodb用户

mongo的安装我们就不提了,这里使用的mongo版本是3.4。首先我们启动mongo,启动命令如下:

./bin/mongod -f bin/mongodb.conf

mongodb.conf的文件内容如下:

dbpath=/data/lehoo/software/mongodb/data/db
logpath=/data/lehoo/software/mongodb/data/log/mongo.log
pidfilepath=/data/lehoo/software/mongodb/mongo.pid
port=27017
fork=true
auth=false

dbpath和logpath可以自行指定,需要注意的是设置auth=false,我们需要使用非验证模式登录,创建一个超级用户,命令如下:

[root@Master mongodb]# ./bin/mongo
MongoDB shell version v3.4.4
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.4
> show dbs
admin  0.000GB
local  0.000GB
> use admin
switched to db admin
> show collections
system.version
> db.createUser({user:"root", pwd:"root",roles: [{role:"root",db:"admin"}]})
Successfully added user: {
    "user" : "root",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
}
> show collections
system.users
system.version
> db.system.users.find()
{ "_id" : "admin.root", "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "h85b/3AU27wIiqDkNc++TQ==", "storedKey" : "lLvHeEialDyfLN4C1AVc81QUQGA=", "serverKey" : "zgfZzcI0CxVueijCc4Egz035jJo=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
> 

到这里我们就创建了一个超级用户,root。退出mongo,修改auth=true,命令如下:

> exit
bye
[root@Master mongodb]# ./bin/mongod -f bin/mongodb.conf -shutdown
killing process with pid: 2625
[root@Master mongodb]# 

修改mongodb.conf文件内容如下:

dbpath=/data/lehoo/software/mongodb/data/db
logpath=/data/lehoo/software/mongodb/data/log/mongo.log
pidfilepath=/data/lehoo/software/mongodb/mongo.pid
port=27017
fork=true
auth=true

再次启动mongo,并使用root用户验证,命令如下:

[root@Master bin]# ./mongod -f mongodb.conf 
about to fork child process, waiting until server is ready for connections.
forked process: 4967
child process started successfully, parent exiting

[root@Master bin]# ./mongo
MongoDB shell version v3.4.4
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.4

> use admin
switched to db admin
> db.auth("root","root")
1
> 

使用db.auth来验证,输出结果是1,说明验证通过,下一步我们就使用root用户来创建我们自己的数据库和用户,数据库名为test,用户名为test。命令如下:

> use test
switched to db test
> db.createUser({user:"test",pwd: "test",roles:[{role:"dbOwner",db:"test"}]})
Successfully added user: {
    "user" : "test",
    "roles" : [
        {
            "role" : "dbOwner",
            "db" : "test"
        }
    ]
}
> use admin
switched to db admin
> db.system.users.find()
{ "_id" : "admin.root", "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "h85b/3AU27wIiqDkNc++TQ==", "storedKey" : "lLvHeEialDyfLN4C1AVc81QUQGA=", "serverKey" : "zgfZzcI0CxVueijCc4Egz035jJo=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
{ "_id" : "test.test", "user" : "test", "db" : "test", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "XyUa5iXZd4DNram39wDWvA==", "storedKey" : "T/nxudYpTRtNkE9DmUtBLfKSHp4=", "serverKey" : "lbqv8A2DDjaC5peHpGWPqr6jDWk=" } }, "roles" : [ { "role" : "dbOwner", "db" : "test" } ] }
> use test
switched to db test
> db.auth("test","test")
1
> 

创建成功,返回admin数据库查看users表中,多出了一个用户,然后再返回test数据库,使用db.auth验证test用户通过。那么我们现在就可以使用test用户来操作test数据库了。下面我们介绍python操作mongodb。

安装pymongo

python的安装这里也不再介绍,这里使用的python版本是3.6.0。我们使用pip的方式安装pymongo,命令如下所示:

[root@Master software]# python -V
Python 3.6.0
[root@Master software]# python -m pip install pymongo
Collecting pymongo
  Downloading pymongo-3.4.0.tar.gz (583kB)
    100% |████████████████████████████████| 583kB 23kB/s 
Installing collected packages: pymongo
  Running setup.py install for pymongo ... done
Successfully installed pymongo-3.4.0
[root@Master software]# 

CRUD

上面我们已经准备好了数据库,也安装上了pymongo,这里使用pymongo来做简单的增删改查操作,操作比较简单直接看代码:

from pymongo import MongoClient

#连接字符串   mongodb://[username:password@]host1[:port1]]][/[database][?options]]
client = MongoClient("mongodb://test:test@192.168.1.235:27017/test?authMechanism=SCRAM-SHA-1") #MONGODB-CR
db = client["test"]

#插入
db.users.insert({"name":"aaa","age":20})#单条插入
db.users.save({"name":"aaa","age":20})#单条插入
db.users.insert([{"name":"bbb","age":21},{"name":"ccc","age":22}])#多条插入

#修改
db.users.update({"name":"aaa"},{"$set":{"age":2}})#单条修改
db.users.update_many({"name":"aaa"},{"$set":{"age":2}})#多条修改

#查询
user = db.users.find_one({"name":"aaa"})#单条查询
print(user["name"],user["age"])


data = db.users.find({"name":"aaa"})#多条查询
for user in data:
    print(user["name"],user["age"])


#删除
db.users.remove({"name":"aaa"})
db.users.remove()#删除全部数据    


client.close()    

输出结果如下:

aaa 2
aaa 2
aaa 2

我们看到使用pymongo来操作mongo的语句和使用mongo命令基本相同。还是很亲切的。

自定义对象

怎么把python的对象,存储到mongodb中呢?基本思路就是把对象转化成字典结构,然后再存储。反之就是把字典结构转化为对象。直接看代码:

from pymongo import MongoClient

class User():
    def __init__(self,name="",age=0,address=None):
        self.name = name
        self.age = age
        self.address = address

    #转化为字典结构
    def toMap(self):
        return {"name":self.name,"age":self.age,"address":self.address.toMap()}

    #转化为对象
    def fromDb(self,data):
        self.name = data["name"]
        self.age = data["age"]
        self.address = Address()
        self.address.fromDb(data["address"])

class Address():
    def __init__(self,country="",city=""):
        self.country = country
        self.city = city

    #转化为字典结构
    def toMap(self):
        return {"country":self.country,"city":self.city}

    #转化为对象
    def fromDb(self,data):
        self.country = data["country"]
        self.city = data["city"]



#创建连接
client = MongoClient("mongodb://test:test@192.168.1.235:27017/test?authMechanism=SCRAM-SHA-1") #MONGODB-CR
db = client["test"]

#创建对象
address = Address("CN","BeiJing")
user = User("aaa",20,address)

#把对象转化为字典
data = user.toMap()
print(data)

#插入数据库
db.users.insert(data)

#查询数据库
result = db.users.find_one({"name":"aaa"})

#把结构转化为对象
user1 = User()
user1.fromDb(result)
print(user1.toMap())

#删除数据
db.users.remove()

client.close()

输出结果如下:

{'age': 20, 'address': {'country': 'CN', 'city': 'BeiJing'}, 'name': 'aaa'}
{'age': 20, 'address': {'country': 'CN', 'city': 'BeiJing'}, 'name': 'aaa'}

前后对象的数据完全一致,说明操作成功。
pymongo操作mongo数据库还有很多复杂高级的操作,比如高级查询,排序,分组,Map,Reduce等。这里就介绍简单的入门操作,需要自行发掘。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值