Python 全棧系列44 - pymongo的基本使用
說明
基於業務和操作的場景的不同,有幾個常用的資料庫是繞不開的,好在python都有對應的介面:
資料庫 | Python介面包 | 用途 |
---|---|---|
mysql | pymysql | 用於存比較靜態的主資料,例如使用者資訊,報表等 |
mongo | pymongo | 用於存非結構化的資訊,可以存日誌級的資訊;例如使用者發過來的json |
redis | redis | 用於處理大量高頻的資料訪問,也可以用於簡單訊息佇列 |
neo4j | py2neo | 用於儲存結構資訊(元資訊),例如演算法的結構,網站的機構,關係網路等 |
這裡主要是先對mongo進行一下回顧(回憶)
安裝啟動
以前在mac上手動安裝的,忘記了,應該是很簡單的。以後都是用docker了,所以不提安裝。
在mac上的啟動:
前端啟動(終端顯示)
mongod --dbpath ~/data/db
後臺啟動。注意這裡有兩個坑:1是要制定的log是檔案,不是目錄;2是路徑必須是絕對路徑,不能想上面那樣簡寫
mongod --dbpath=YOURABSPATH/data --logpath=YOURABSPATH/data/log/mongodb.log --fork
隨便輸幾條基本命令(不需要加分號)
+ 1 >>> show dbs | 裡面有baidu庫
+ 2 >>> use baidu
+ 3 >>> show collections
+ 4 >>> db.gps.find() | 查詢所有資料
mongo預設沒有設定使用者和密碼,需要設定的話可以參考這篇文章
ubuntu上的安裝我以前捋過,先放著吧
- 1 sudo apt-get install mongodb 安裝服務, 參考這篇文章
- 2 啟動 service mongodb start (後臺啟動)
- 3 檢視 pgrep mongo -l
- 4 停止 service mongodb stop
- 5 修改遠端訪問:sudo vi /etc/mongodb.conf
- bind_ip 改為 0.0.0.0
- 考慮如果是個人的資料,不在伺服器長存,如果是伺服器執行,那麼需要發給訊息佇列轉本地儲存
-6 重啟 service mongodb restart
通過pymongo訪問
from pymongo import MongoClient
from datetime import datetime
conn = MongoClient('localhost', 27017)
# 1 選擇資料庫。連線mydb資料庫,沒有則自動創
db = conn.my1 # 也可以使用 conn['my1']
# 2 選擇一個集合(相當於選擇一張表)。使用test_set集合,沒有則自動建立
test_coll = db['coll']
# 3 製造一條資料進行測試
test_dict1 = {}
test_dict1['name'] = 'andy'
test_dict1['occupation'] = 'Data Scientist'
test_dict1['age'] = 111
test_dict1['opr_ts'] = datetime.now()
# 增 / insert_one 和 insert_many
res_create = test_coll.insert_one(test_dict1)
# 刪 / delete_one 和 delete_many
# res_delete = test_coll.delete_one({'name':'andy'})
# 改 /
# 另外我們還可以使用 $set 操作符對資料進行更新。使用$set則只更新字典記憶體在的欄位,
# 其它欄位則不更新,也不刪除。如果不用則會更新所有的資料,而其它存在的欄位則會被刪除。
test_dict2 = {}
test_dict2['age'] = 222
# update 會整條重新整理掉 | 已經不建議使用了
# update_one配合$只會重新整理已存在的
# res_update = test_coll.update({'name': 'andy'}, test_dict2)
res_update = test_coll.update_one({'name':'andy'}, {'$set':test_dict2})
# res_update中返回的內容有是否成功,匹配幾條,改變幾條等資訊
# 可以參考這個連結,裡面有很多實用內容 https://www.cnblogs.com/nixingguo/p/7260604.html
# 查: find有很多方法,直接找一條,找到一條刪一條... (利用自動聯想可以找到很多)
# res_find = test_coll.find_one({'age':{'$gt':30}})
res_find = test_coll.find({'age': {'$gt': 30}}) # find要用list展示出來
# datetime也可以使用timestamp方法將日期轉為時間戳
'''
比較符號歸納:
1. $lt 小於{'age': {'$lt': 20}}
2. $gt 大於{'age': {'$gt': 20}}
3. $lte 小於等於{'age': {'$lte': 20}}
4. $gte 大於等於{'age': {'$gte': 20}}
5. $ne 不等於{'age': {'$ne': 20}}
6. $in 在範圍內{'age': {'$in': [20, 23]}}
7. $nin 不在範圍內{'age': {'$nin': [20, 23]}}
符號含義示例示例含義
$regex匹配正則{'name': {'$regex': '^M.*'}}name以M開頭
$exists屬性是否存在{'name': {'$exists': True}}name屬性存在
$type型別判斷{'age': {'$type': 'int'}}age的型別為int
$mod數字模操作{'age': {'$mod': [5, 0]}}年齡模5餘0
$text文字查詢{'$text': {'$search': 'Mike'}}text型別的屬性中包含Mike字串
$where高階條件查詢{'$where': 'obj.fans_count == obj.follows_count'}自身粉絲數等於關注數
# 排序
# 可以呼叫sort方法,傳入排序的欄位及升降序標誌即可,示例如下:
results = collection.find().sort('name', pymongo.ASCENDING)
# 偏移,可能想只取某幾個元素,在這裡可以利用skip()方法偏移幾個位置,比如偏移2,就忽略前2個元素,得到第三個及以後的元素。
results = collection.find().sort('name', pymongo.ASCENDING).skip(2)
# 用列表迴圈的方式獲取值
[result['name'] for result in results]
1.帶條件刪除
db.user.remove({“name”:“zhangshan”});
2.刪除所有數
db.user.remove({})
3.刪除集合
db.user.drop()
4.刪除整個資料庫
show dbs;
db.user.getDB()
db.dropDatabase()
mongodb刪除集合後磁碟空間不釋放,用db.repairDatabase()去修復才能釋放。
但是在修復的過程中如果出現了非正常的mongodb的掛掉,再次啟動時啟動不了的,需要先修復才可以,
可以利用./mongod --repair --dbpath=/data/mongo/,
如果你是把資料庫單獨的放在一個資料夾中指定dbpath時就指向要修復的資料庫就可以,修復可能要花費很長的時間,
在使用db.repairDatabase()去修復時一定要停掉讀寫,並且mongodb要有備機才可以,
不然千萬不要隨便使用db.repairDatabase()來修復資料庫,切記。
基本的操作內容就這麼多吧,之後就結合實際使用來看。
案例
原來我還做過離線的tdf-idf計算,使用mongo儲存,等有時間的時候整理一下。
待續…
相關文章
- pymongo的基本使用Go
- Python全棧MongoDB資料庫(聚合、二進位制、GridFS、pymongo模組)Python全棧MongoDB資料庫
- MongoDB 及 PyMongo 的基本用法MongoDB
- 全棧 - 4 Python 先學會基本語法全棧Python
- Python3中使用PyMongo的方法詳解PythonGo
- Python全棧實戰系列之一:網路爬蟲的初次體驗Python全棧爬蟲
- Python全棧指什麼?全棧工程師的意義是什麼?Python全棧工程師
- 【Python】pymongo連結mongoPythonGo
- PyMongo安裝和使用Go
- Python全棧Web(Django框架、模板)Python全棧WebDjango框架
- Python全棧Web(Ajax概述建立)Python全棧Web
- Python 全棧案例初體驗Python全棧
- Python3.5使用pymongo(3.3.1)操作mongodb資料庫PythonMongoDB資料庫
- 棧的基本操作
- [python]pymongo查詢與修改PythonGo
- Python全棧Web(Django框架、模型中的CRUD)Python全棧WebDjango框架模型
- PyMongo 基礎使用指南Go
- Python全棧Web(HTML標籤大全)Python全棧WebHTML
- Pymongo Tutorial & Pymongo入門教Go
- Python全棧工程師之從網頁搭建入門到Flask全棧專案實戰(5) - Flask中的ORM使用Python全棧工程師網頁FlaskORM
- Python全棧開發-Python基礎教程-01Python全棧
- python全棧02-----url_for,HTTP的請求方法Python全棧HTTP
- Python全棧Web(定位佈局、定位方式)Python全棧Web
- Python全棧Web(Flask框架、多表關聯)Python全棧WebFlask框架
- Python全棧Web(JavaScript函式、陣列)Python全棧WebJavaScript函式陣列
- Python全棧開發之—assert斷言Python全棧
- Python安裝PyMongo的方法詳細介紹PythonGo
- 學python入門有用嗎?Python全棧開發Python全棧
- Python全棧 MongoDB 資料庫(資料的查詢)Python全棧MongoDB資料庫
- Python全棧MongoDB資料庫(資料的查詢)Python全棧MongoDB資料庫
- 順序棧、鏈棧基本操作
- Grafana 系列文章(一):基於 Grafana 的全棧可觀察性 DemoGrafana全棧
- 全棧 – 12 資料庫 用Python操作MySQL全棧資料庫PythonMySql
- Python全棧開發之—redis資料庫Python全棧Redis資料庫
- 全棧 - 12 資料庫 用Python操作MySQL全棧資料庫PythonMySql
- Python全棧開發筆記—day1Python全棧筆記
- Python 全棧開發 -- 開發環境篇Python全棧開發環境
- MongoDB Python官方驅動 PyMongo 的簡單封裝MongoDBPython封裝