pymongo 操做

python 操做 mongoDB

模塊

pymongopython

安裝方法

sudo pip3 install pymongo

操做步驟

1. 建立數據庫鏈接對象shell

conn = pymonge.MomgoClient("localhost",27017)

2. 生成操做的數據庫對象數據庫

db = conn.stu

3. 生成集合對象ssh

myset = db.class0

4. 經過 集合對象 調用結構完成數據操做socket

['_BaseObject__codec_options',
 '_BaseObject__read_concern',
 '_BaseObject__read_preference',
 '_BaseObject__write_concern',
 '_Collection__create',
 '_Collection__create_index',
 '_Collection__database',
 '_Collection__find_and_modify',
 '_Collection__full_name',
 '_Collection__name',
 '_Collection__write_response_codec_options',
 '__call__',
 '__class__',
 '__delattr__',
 '__dict__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattr__',
 '__getattribute__',
 '__getitem__',
 '__gt__',
 '__hash__',
 '__init__',
 '__iter__',
 '__le__',
 '__lt__',
 '__module__',
 '__ne__',
 '__new__',
 '__next__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 '__weakref__',
 '_command',
 '_count',
 '_delete',
 '_insert',
 '_insert_one',
 '_legacy_write',
 '_socket_for_primary_reads',
 '_socket_for_reads',
 '_socket_for_writes',
 '_update',
 'aggregate',
 'bulk_write',
 'codec_options',
 'count',
 'create_index',
 'create_indexes',
 'database',
 'delete_many',
 'delete_one',
 'distinct',
 'drop',
 'drop_index',
 'drop_indexes',
 'ensure_index',
 'find',
 'find_and_modify',
 'find_one',
 'find_one_and_delete',
 'find_one_and_replace',
 'find_one_and_update',
 'full_name',
 'group',
 'index_information',
 'initialize_ordered_bulk_op',
 'initialize_unordered_bulk_op',
 'inline_map_reduce',
 'insert',
 'insert_many',
 'insert_one',
 'list_indexes',
 'map_reduce',
 'name',
 'next',
 'options',
 'parallel_scan',
 'read_concern',
 'read_preference',
 'reindex',
 'remove',
 'rename',
 'replace_one',
 'save',
 'update',
 'update_many',
 'update_one',
 'with_options',
 'write_concern']
集合對象內的全部方法

5. 關閉數據庫鏈接ide

db.close()

數據操做

插入文檔

insert_many     插入多條
insert_one      插入一條
insert          插入一條或多條
save            保存文檔

實例函數

myset.insert_one({"name":"張鐵林","King":"乾隆"})
myset.insert_many([{
"name":"張國立","King":"康熙"}, {"name":"陳道明","King":"康熙"}])
myset.insert({
"name":"唐國強","King":"雍正"}) myset.insert([{"name":"陳建斌","King":"雍正"}, {"_id":1, "name":"吳奇隆","King":"四爺"}])
myset.save({
"_id":1,"name":"聶遠","King":"乾隆"})

查找文檔

find        查找全部
find_one    查找首個

find

find(query,field)

參數形式  同 mongoshell 中的 findspa

返回值   遊標對象code

對比 mongoDB 的語句orm

  全部的操做符加上引號,做爲字符串形式

  true/false/null 改爲 True/False/None

實例

cursor = myset.find({"name":{"$exists":True}},{"_id":0})

for i in cursor:
    # print(i)
    print(i["name"],"--",i["King"])

cursor 對象屬性函數

cursor 本質爲返回的文檔集合的序列, 同 mongoDB 同樣能夠繼續調用其餘的精確篩選方法

next()      獲取下一個文檔
limit()     獲取前幾條文檔
skip()      跳過幾條
count()     計數
sort()      排序
* sort 的參數發生了變化 sort([(域名,1/-1),(),()...]) * limit,sort,skip 使用時, 必須保證遊標在最開始的位置

 實例

 # for i in cursor.limit(3):
 # for i in cursor.skip(3):
 # for i in cursor.sort([("name",1),("age",-1)]):
 for i in cursor.sort([("name",1)]):
     print(i)

find_one

find_one(query,field)

功能  查找首個符合條件的文檔

參數  同 find

返回值  返回字典(只查到首條, 所以返回數據也是單數據, 即 字典)

實例

dic = {"$or":[{"King":"乾隆"},{"name":"陳道明"}]}
d = myset.find_one(dic,{"_id":0})
print(d)

修改操做

update_one      修改一個
update_many     修改多個
update          修改一個或多個

實例

myset.update_many({"King":"康熙"},{"$set":{"king_name":"玄燁"}})
myset.update_one({"King":"雍正"},{"$set":{"king_name":"忘了名字"}})
myset.update_one({"name":"鄭少秋"},{"$set":{"King":"乾隆"}},upsert=True)
myset.update({"King":"乾隆"},{"$set":{"king_name":"弘曆"}})
myset.update({"King":"乾隆"},{"$set":{"king_name":"弘曆"}},multi=True)

刪除操做

delete_one      刪除一個
delete_many     刪除多個
remove          刪除一個或多個

實例

myset.delete_one({"King":"康熙"})
myset.delete_many({"King":"雍正"})
myset.remove({"king_name":{"$exists":False}})
myset.remove({"king_name":None},multi=True)

複合操做

find_one_and_update
find_one_and_delete

實例

data = myset.find_one_and_delete({"name":"張鐵林"})
print(data)

文檔操做總體實例

from pymongo import MongoClient

# 建立數據庫連接
conn = MongoClient("localhost",27017)

# 建立數據庫對象
db = conn.stu
# db = conn["stu"]

# 生成集合對象
myset = db.class0
# myset = db["class0"]

# 建立集合對象
myset = db.class4

# 數據操做


# -----------------------insert----------------------
# myset.insert_one({"name":"張鐵林","King":"乾隆"})

# myset.insert_many([{"name":"張國立","King":"康熙"},\
    #  {"name":"陳道明","King":"康熙"}])

# myset.insert({"name":"唐國強","King":"雍正"})
# myset.insert([{"name":"陳建斌","King":"雍正"},\
    # {"_id":1, "name":"吳奇隆","King":"四爺"}])

# myset.save({"_id":1,"name":"聶遠","King":"乾隆"})


#  ----------------------find-----------------------
# cursor = myset.find({"name":{"$exists":True}},{"_id":0})
# print(cursor.next()) # 打印下一個文檔
# for i in cursor:
    # print(i)
    # print(i["name"],"--",i["King"])
# 全部的操做符加上引號,做爲字符串形式
# true/false/null 改爲 True/False/None


# for i in cursor.limit(3):
# for i in cursor.skip(3):
# for i in cursor.sort([("name",1),("age",-1)]):
# for i in cursor.sort([("name",1)]):
    # print(i)
# limit,sort,skip 使用時, 必須保證遊標在最開始的位置

# dic = {"$or":[{"King":"乾隆"},{"name":"陳道明"}]}
# d = myset.find_one(dic,{"_id":0})
# print(d)


#  ----------------------update-----------------------
# myset.update_many({"King":"康熙"},{"$set":{"king_name":"玄燁"}})
# myset.update_one({"King":"雍正"},{"$set":{"king_name":"忘了名字"}})
# myset.update_one({"name":"鄭少秋"},{"$set":{"King":"乾隆"}},upsert=True)
# myset.update({"King":"乾隆"},{"$set":{"king_name":"弘曆"}})
# myset.update({"King":"乾隆"},{"$set":{"king_name":"弘曆"}},multi=True)


# ------------------------delete----------------------
# myset.delete_one({"King":"康熙"})
# myset.delete_many({"King":"雍正"})
# myset.remove({"king_name":{"$exists":False}})
# myset.remove({"king_name":None},multi=True)


# ------------------------複合操做----------------------
# data = myset.find_one_and_delete({"name":"張鐵林"})
# print(data)


# 關閉連接
conn.close()

索引操做

create_index    建立索引
    參數: 二元元組構成列表
        create_index([("age",1)])
        create_index([("age",1),("name":-1)])
        也能夠直接寫 域名 ("age") 表示對該域建立正向索引
    返回值: 索引名稱
list_indexes    查看索引
drop_index      刪除索引
drop_indexes    刪除全部索引

聚合操做

aggregate()

功能  完成聚合操做

參數  聚合管道, 同mongoshell 中的聚合

返回值  數據操做結果遊標對象

實例

lis = [
    {"$group": {"_id": "$sex", "num": {"$sum": 1}}},
]
cursor = myset.aggregate(lis)

索引聚合實例

from pymongo import MongoClient

conn = MongoClient("localhost", 27017)
db = conn.stu
myset = db.class0

# -------------------------------索引--------------------------------
# 建立
# index_name = myset.create_index("name")
# index_age = myset.create_index("age",name="Age",sparse=True)
# index_age = myset.create_index("age",name="Age",sparse=True,unique=True)


#  刪除索引
# myset.drop_index("Age")
# myset.drop_indexes()


# 查看
# for i in myset.list_indexes():
# print(i)

# ------------------------------聚合----------------------------------
lis = [
    {"$group": {"_id": "$sex", "num": {"$sum": 1}}},
]

cursor = myset.aggregate(lis)
for i in cursor:
    print(i)

conn.close()

文件操做

1. 導入bson 二進制模塊,鏈接數據庫

import bson.binary

2. 選擇要存儲的文件, 使用 rb 方式讀取內容

3. 將讀取的內容轉換爲 bson 格式

content = bson.binary.Binary(data)

  功能  將 bytes 字串 轉換爲 bson 格式

  參數  bytes 字串

  返回值  轉換後的數據

4. 將內容插入到數據庫

實例

from pymongo import MongoClient
import bson.binary

conn = MongoClient("localhost",27017)
db = conn.image
myset = db.mm

# --------------------存儲----------------------------------
# 讀取圖片內容
# with open("123.PNG","rb") as f:
    # data = f.read()

# 格式轉化
# conntent = bson.binary.Binary(data)

# 插入數據庫
# myset.insert_one({"filename":"123.jpg","data":conntent})


#--------------------取出文件-------------------------------
# img = myset.find_one({"filename":"123.jpg"})

# 寫入本地
# with open("123.jpg","wb") as f:  # find_one 會自動轉換不須要本身再轉換了
    # f.write(img["data"])


conn.close()
相關文章
相關標籤/搜索