Python操作Mongo數(shù)據(jù)庫

連接數(shù)據(jù)庫

import pymongo

# 連接到數(shù)據(jù)庫愤兵,以下兩種方式均可
client = pymongo.MongoClient(host='localhost', port=27017)
client = pymongo.MongoClient('mongodb://localhost:27017')

# 指定連接的數(shù)據(jù)庫飞蹂,以下兩種方式均可
db = client.demo
db = client['demo']

# 指定數(shù)據(jù)庫的某個集合悲雳,以下兩種方式均可
collection = db.demo_1
collection = db['demo_1']

插入數(shù)據(jù)

  • insert_one(), 一次插入一條記錄
  • insert_many(), 一次插入多條記錄

mongo默認(rèn)會給每一條記錄添加一個_id字段,用來唯一標(biāo)識每一條記錄缀程。

# 一次插入一條記錄
book = {
    'name': '五年高考三年模擬',
    'price': 50,
}

result = collection.insert_one(book)
print(result.inserted_id)

# 一次插入多條數(shù)據(jù)

book = [
    {
    'name': '五年高考',
    'price': 50,
},
    {
    'name': '三年模擬',
    'price': 30,
},
]
resutl = collection.insert_many(book)

可以使用result.inserted_idresult.inserted_ids來查看插入記錄的_id編號搜吧。

查詢數(shù)據(jù)

  • find_one(), 查詢一條記錄杨凑, 以字典的形式直接返回數(shù)據(jù)結(jié)果赎败。
  • find(), 查詢多條記錄蠢甲, 返回的是Cursor對象僵刮,需要遍歷才能獲取數(shù)據(jù)
# 查詢單條記錄
results = collection.find_one({'name': '五年高考'})
print(result)

# 查詢多條記錄
results = collection.find({'price': 50})
for result in results:
    print(result)

mongo提供了一些高級的查詢參數(shù)來實現(xiàn)更加靈活的數(shù)據(jù)查詢。

比較運(yùn)算符

符號 含義 例子
$lt 小于 {'price': {'$lt':50}}
$gt 大于 {'price': {'$gt':30}}
$lte 小于等于 {'price': {'$lte':40}}
$gte 大于等于 {'price': {'$lte':30}}
$ne 不等于 {'price': {'$ne':30}}
$in 在范圍內(nèi) {'price': {'$in':[30,50]}}
$nin 不在范圍內(nèi) {'price': {'$nin':[30,40]}}

正則表達(dá)式

符號 含義 例子
$regex 匹配正則 {'name': {'$regex': '^M.*'}}
$exists 屬性是否存在 {'name': {'$exists': True}}
$type 類型判斷 {'age': {'$type': 'int'}}
$mod 數(shù)字模操作 {'age': {'$mod': [5, 0]}}
$text 文本查詢 {'$text': {'$search': 'Mike'}}
$where 高級條件查詢 {'$where': 'obj.fans_count == obj.follows_count'}

更新數(shù)據(jù)

  • update_one(), 只更新匹配到的第一條記錄
  • update_many()搞糕, 更新匹配到的全部記錄
condition = {'name':'五年高考'}
price_change = {'price': 100}

# 方式1
result = collection.update_one(condition,price_change)
print(result)

# 方式2
result = collection.update_one(condition, {'$set': price_change})
print(result)

以上兩種方式都是更新name為五年高考的字段勇吊,但是其結(jié)果卻是不同的
方式一:
相當(dāng)于查詢到name為五年高考的字段,將其刪除窍仰,再將待更新的數(shù)據(jù)添加上去汉规。結(jié)果就是只剩下一個price為100的數(shù)據(jù)。

方式二:
查詢到name為五年高考的字段驹吮,僅僅是將price更新為了100针史,其余不動。

另外可以調(diào)用result.matched_count, result.modified_count來查看匹配的條數(shù)和影響的條數(shù)碟狞。

刪除數(shù)據(jù)

  • delete_one()啄枕, 刪除符合條件的第一條數(shù)據(jù)
  • delete_many(), 刪除符合條件的全部數(shù)據(jù)
# 刪除一條
result = collection.delete_one({'name': '五年高考'})
print(result)

# 刪除多條
result = collection.delete_many({'price':50})  # 刪除價格為50的全部記錄
result = collection.delete_many({'price':{'$gt':30}}) # 刪除價格大于30的全部記錄

另外可以調(diào)用result.deleted_count查看刪除的條數(shù)族沃。

其他常用方法

  • count()
count = collection.find().count() # 查詢表中全部記錄的條數(shù)  
count = collection.find({'price': {'$gt':30}}).count()  # 價格大于30的條數(shù)
  • sort()
results = collection.find().sort('name', pymongo.ASCENDING) # 按照name升序返回結(jié)果
results = collection.find().sort('price', pymongo.DECENDING) # 按照price降序返回結(jié)果
  • limit()
results = collection.find().sort('name', pymongo.ASCENDING).limit(2)  # 限制返回兩條結(jié)果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末频祝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子脆淹,更是在濱河造成了極大的恐慌常空,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盖溺,死亡現(xiàn)場離奇詭異漓糙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)烘嘱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門昆禽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拙友,你說我怎么就攤上這事〖吖” “怎么了遗契?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長病曾。 經(jīng)常有香客問我牍蜂,道長,這世上最難降的妖魔是什么泰涂? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任鲫竞,我火速辦了婚禮,結(jié)果婚禮上逼蒙,老公的妹妹穿的比我還像新娘从绘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布僵井。 她就那樣靜靜地躺著陕截,像睡著了一般。 火紅的嫁衣襯著肌膚如雪批什。 梳的紋絲不亂的頭發(fā)上农曲,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機(jī)與錄音驻债,去河邊找鬼乳规。 笑死,一個胖子當(dāng)著我的面吹牛合呐,可吹牛的內(nèi)容都是我干的暮的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼合砂,長吁一口氣:“原來是場噩夢啊……” “哼青扔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起翩伪,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤微猖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后缘屹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凛剥,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年轻姿,在試婚紗的時候發(fā)現(xiàn)自己被綠了犁珠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡互亮,死狀恐怖犁享,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情豹休,我是刑警寧澤炊昆,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站威根,受9級特大地震影響凤巨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洛搀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一敢茁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧留美,春花似錦彰檬、人聲如沸伸刃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奕枝。三九已至,卻和暖如春瓶堕,著一層夾襖步出監(jiān)牢的瞬間隘道,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工郎笆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谭梗,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓宛蚓,卻偏偏與公主長得像激捏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子凄吏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

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