pymongo 入門

Pymongo 使用流程

使用語言: python3.6
環(huán)境 : Windows 10溯街,Docker(Mongodb)

0 安裝##

pip install pymongo

1.鏈接

import pymongo
from pymongo import MongoClient
client=MongoClient("localhost",27017)

2.獲取 databases 鏈接

db = client['test-database']

3.獲取 一個(gè) Collection

collection = db['test-collection']

4.Documents

import datetime
post = {"author": "Mike",
       "text": "My first blog post!",
       "tags": ["mongodb", "python", "pymongo"],
       "date": datetime.datetime.utcnow()}

5 插入單個(gè)數(shù)據(jù)

posts = db.posts
post_id = posts.insert_one(post).inserted_id
print(post_id)
59be0170bf94d71efc40a7ce

獲取 collections 名稱

db.collection_names(include_system_collections=False)
['posts']

6. 獲取單個(gè)數(shù)據(jù)

import pprint
pprint.pprint(posts.find_one())
{'_id': ObjectId('59be0170bf94d71efc40a7ce'),
 'author': 'Mike',
 'date': datetime.datetime(2017, 9, 17, 5, 0, 31, 418000),
 'tags': ['mongodb', 'python', 'pymongo'],
 'text': 'My first blog post!'}

7.條件查詢單個(gè)數(shù)據(jù)

 pprint.pprint(posts.find_one({"author": "Mike"}))
{'_id': ObjectId('59be0170bf94d71efc40a7ce'),
 'author': 'Mike',
 'date': datetime.datetime(2017, 9, 17, 5, 0, 31, 418000),
 'tags': ['mongodb', 'python', 'pymongo'],
 'text': 'My first blog post!'}
posts.find_one({"author": "Eliot"})

8 根據(jù) ID 查詢

print(post_id)

59be0170bf94d71efc40a7ce
pprint.pprint(posts.find_one({"_id": post_id}))
{'_id': ObjectId('59be0170bf94d71efc40a7ce'),
 'author': 'Mike',
 'date': datetime.datetime(2017, 9, 17, 5, 0, 31, 418000),
 'tags': ['mongodb', 'python', 'pymongo'],
 'text': 'My first blog post!'}

id 不是字符串

post_id_as_str = str(post_id)
posts.find_one({"_id": post_id_as_str})
from bson.objectid import ObjectId
def get(post_id):
    # Convert from string to ObjectId:
    document = client.db.collection.find_one({'_id': ObjectId(post_id)})
print(get(post_id))
None
post_id
ObjectId('59be0170bf94d71efc40a7ce')

9 批量插入

new_posts = [{"author": "Mike",
               "text": "Another post!",
               "tags": ["bulk", "insert"],
               "date": datetime.datetime(2009, 11, 12, 11, 14)},
              {"author": "Eliot",
               "title": "MongoDB is fun",
              "text": "and pretty easy too!",
               "date": datetime.datetime(2009, 11, 10, 10, 45)}]
result = posts.insert_many(new_posts)
result.inserted_ids
[ObjectId('59be0175bf94d71efc40a7cf'), ObjectId('59be0175bf94d71efc40a7d0')]

10 查詢多個(gè)數(shù)據(jù)

for post in posts.find():
    pprint.pprint(post)
{'_id': ObjectId('59be0170bf94d71efc40a7ce'),
 'author': 'Mike',
 'date': datetime.datetime(2017, 9, 17, 5, 0, 31, 418000),
 'tags': ['mongodb', 'python', 'pymongo'],
 'text': 'My first blog post!'}
{'_id': ObjectId('59be0175bf94d71efc40a7cf'),
 'author': 'Mike',
 'date': datetime.datetime(2009, 11, 12, 11, 14),
 'tags': ['bulk', 'insert'],
 'text': 'Another post!'}
{'_id': ObjectId('59be0175bf94d71efc40a7d0'),
 'author': 'Eliot',
 'date': datetime.datetime(2009, 11, 10, 10, 45),
 'text': 'and pretty easy too!',
 'title': 'MongoDB is fun'}

11 多個(gè)數(shù)據(jù)條件查詢

for post in posts.find({"author": "Mike"}):
    pprint.pprint(post)
{'_id': ObjectId('59be0170bf94d71efc40a7ce'),
 'author': 'Mike',
 'date': datetime.datetime(2017, 9, 17, 5, 0, 31, 418000),
 'tags': ['mongodb', 'python', 'pymongo'],
 'text': 'My first blog post!'}
{'_id': ObjectId('59be0175bf94d71efc40a7cf'),
 'author': 'Mike',
 'date': datetime.datetime(2009, 11, 12, 11, 14),
 'tags': ['bulk', 'insert'],
 'text': 'Another post!'}

12 計(jì)數(shù)

posts.count()
3

13 條件計(jì)數(shù)

posts.find({"author": "Mike"}).count()
2

14 范圍查詢

d = datetime.datetime(2015, 11, 12, 12)
for post in posts.find({"date": {"$lt": d}}).sort("author"):
    pprint.pprint(post)
{'_id': ObjectId('59be0175bf94d71efc40a7d0'),
 'author': 'Eliot',
 'date': datetime.datetime(2009, 11, 10, 10, 45),
 'text': 'and pretty easy too!',
 'title': 'MongoDB is fun'}
{'_id': ObjectId('59be0175bf94d71efc40a7cf'),
 'author': 'Mike',
 'date': datetime.datetime(2009, 11, 12, 11, 14),
 'tags': ['bulk', 'insert'],
 'text': 'Another post!'}

15 index

result = db.profiles.create_index([('user_id', pymongo.ASCENDING)],
                                  unique=True)
sorted(list(db.profiles.index_information()))
['_id_', 'user_id_1']
user_profiles = [
     {'user_id': 211, 'name': 'Luke'},
     {'user_id': 212, 'name': 'Ziltoid'}]
result = db.profiles.insert_many(user_profiles)
new_profile = {'user_id': 213, 'name': 'Drew'}
duplicate_profile = {'user_id': 212, 'name': 'Tommy'}
 result = db.profiles.insert_one(new_profile)  # This is fine.
result = db.profiles.insert_one(duplicate_profile)
---------------------------------------------------------------------------

DuplicateKeyError                         Traceback (most recent call last)

<ipython-input-75-5816b1ed923c> in <module>()
----> 1 result = db.profiles.insert_one(duplicate_profile)


d:\app\XXXX\anaconda3\envs\pynt\lib\site-packages\pymongo\collection.py in insert_one(self, document, bypass_document_validation)
    668             return InsertOneResult(
    669                 self._insert(sock_info, document,
--> 670                              bypass_doc_val=bypass_document_validation),
    671                 self.write_concern.acknowledged)
    672 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恰画,一起剝皮案震驚了整個(gè)濱河市虎锚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖屠凶,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異肆资,居然都是意外死亡矗愧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門郑原,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唉韭,“玉大人,你說我怎么就攤上這事犯犁∈舴撸” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵栖秕,是天一觀的道長(zhǎng)春塌。 經(jīng)常有香客問我,道長(zhǎng)簇捍,這世上最難降的妖魔是什么只壳? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任老玛,我火速辦了婚禮粉怕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盼樟。我一直安慰自己事格,他們只是感情好惕艳,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著驹愚,像睡著了一般远搪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逢捺,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天谁鳍,我揣著相機(jī)與錄音,去河邊找鬼劫瞳。 笑死倘潜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的志于。 我是一名探鬼主播涮因,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼伺绽!你這毒婦竟也來了养泡?” 一聲冷哼從身側(cè)響起嗜湃,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瓤荔,沒想到半個(gè)月后净蚤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡输硝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了程梦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片点把。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖屿附,靈堂內(nèi)的尸體忽然破棺而出郎逃,到底是詐尸還是另有隱情,我是刑警寧澤挺份,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布褒翰,位于F島的核電站,受9級(jí)特大地震影響匀泊,放射性物質(zhì)發(fā)生泄漏优训。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一各聘、第九天 我趴在偏房一處隱蔽的房頂上張望揣非。 院中可真熱鬧,春花似錦躲因、人聲如沸早敬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搞监。三九已至,卻和暖如春镰矿,著一層夾襖步出監(jiān)牢的瞬間琐驴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工衡怀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棍矛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓抛杨,卻偏偏與公主長(zhǎng)得像够委,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子怖现,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理茁帽,服務(wù)發(fā)現(xiàn)玉罐,斷路器,智...
    卡卡羅2017閱讀 134,628評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,734評(píng)論 25 707
  • “你可曾聽說過月老潘拨?” “那個(gè)掌管世間姻緣的神仙吊输?” “不錯(cuò)√罚” "我聽說季蚂,如果月老用紅線系住有情人,這對(duì)有情人就...
    泥藏風(fēng)閱讀 233評(píng)論 0 2
  • 護(hù)膚已經(jīng)成為 我們每天生活的日常 但我們每天都在堅(jiān)持的 護(hù)膚習(xí)慣是對(duì)的嗎 護(hù)膚惡習(xí)一 把緊膚水直接倒在手上料滥,以為用...
    希頌美聊閱讀 281評(píng)論 0 1
  • 如果有人一直關(guān)注我葵腹,會(huì)發(fā)現(xiàn)在我寫完《初來乍到》后的這一個(gè)月里,我也曾公開了幾篇文章屿岂,但一天之內(nèi)又消失了践宴。最后的結(jié)果...
    少為同學(xué)閱讀 1,028評(píng)論 26 30