python連接mongodb有多種orm,主流的有pymongo和mongoengine。
pymongo
安裝相關模塊
pip install pymongo
pymongo操作
MongoClient對象:用于與MongoDB服務器建立連接
DataBase對象:對應著MongoDB中的數據庫
Collection對象:對應著MongoDB中的集合
Cursor對象:查詢方法find()返回的對象,用于進行多行數據的遍歷
insert_one:加入一條文檔對象
insert_many:加入多條文檔對象
find_one:查找一條文檔對象
find:查找多條文檔對象
update_one:更新一條文檔對象
update_many:更新多條文檔對象
delete_one:刪除一條文檔對象
delete_many:刪除多條文檔對象
# test.py
from pymongo import *
def get_col():"""獲取一個集合對象"""try:# 連接mongodb,connect=False參數加上client = MongoClient(host='192.168.1.21',port=27017, username="admin", password="123", connect=False)# client = MongoClient("mongodb://admin:123@192.168.1.21") # 另一種寫法col = client.tms.eegpic # 獲取集合對象except Exception as e:raise AttributeError("連接出錯:{err}".format(err=e))else:return colif __name__ == "__main__":col = get_col()res = col.insert_one({'name':'cwp','age':24, 'sex':1}) # 插入一條數據col.insert_many([{'name': 'cwp', 'age': 24, 'sex': 1},{'name': 'hhh', 'age': 24, 'sex': 1}]) # 多條per = col.find_one() # 查詢一條per = col.find() # 查詢所有col.update_many({'sex': 1}, {'$set': {'name': 'haha'}}) # 更新一條col.delete_one({'sex': 1}) # 刪除一條
flask_pymongo操作mongodb
flask_pymongo是方便pymongo集成到flask框架中,用法和pymongo幾乎一樣。
pip install flask_pymongo
# extensions
from flask_pymongo import PyMongomongo = PyMongo()# __init__.py
app = Flask(__name__)
mongo.init_app(app=app)# setting.py
MONGO_URL = 'mongodb://username:passwd@localhost:27017/db' # 設置連接參數# 得到的mongo對象相當于上例的client對象,剩下的用法與pymongo幾乎一樣
flask_mongoengine操作mongodb
flask_mongoengine是mongoengine在flask框架的集成,mongoengine可以按照類似關系型數據庫來定義數據的結構,使得操作風格和關系型數據庫相似,可以使得代碼更好的維持MVC結構。
pip install flask_mongoengine
# extensions.py
from flask_mongoengine import MongoEnginedb = MongoEngine()# setting.py
MONGODB_SETTINGS = {'db': 'project1','host': '192.168.1.35','port': 12345,'username':'webapp','password':'pwd123'
}
MONGODB_CONNECT = False # 在第一次訪問數據庫是才打開連接# __init__.py
from extensions import dbapp = Flask(__name__)
app.init_app(app=app)
# models.py
from extensions import dbclass User(db.Document):"""用戶model"""meta = {'collection': 'todo', # 指定集合'ordering': ['-create_at'], # 指定查詢順序'strict': False, # 是否使用嚴格模式,默認是True'max_documents': 1000, # 文檔數'max_size': 2000000 # 字節數}email = db.Document.StringField(default='') # 設置默認值username = db.Document.StringField(max_length=50,required=True) # 最大長度,不能為空values = ListField(IntField(), default=[])class Book(db.Document):author = ReferenceField(User)通用參數:
max_length:最大長度
required:是否要求一定存在這個字段
default: 默認值;
unique:是否不能重復,true表示唯一
primary_key:是否作為主鍵
choices:枚舉,如:choices=[A,B,C],choices=((A,large),(B,small))或限制值
StringField 字符串
BinaryField 二進制
PasswordField 密碼
URLField url格式字符串
EmailField email格式字符串
IntField 整數
FloatField 浮點數
BooleanField 布爾
DateTimeField 日期
DictField 字典
FileField GridFS存儲字段
ImageField 圖像文件存儲區域
ListField 數組類型
EmbeddedDocumentField 嵌入文件
ReferenceField 引用其他的model,相當于外鍵
users = User.objects(username='xxx') # 獲取查詢對象
# 排序
users = User.objects(username='xxx').order_by("_id")
# 限制返回
users = User.objects(username='xxx').limit(3) # 過濾器
first():返回第一個
all() : 返回列表
get(_id=xxx):通過id查詢
get_or_404:與.get()類似,但如果對象為DoesNotExist,則調用abort(404)。
first_or_404:與上面相同,除了.first()。
paginate:對QuerySet進行分頁。采用兩個參數,page和per_page。
paginate_field:從QuerySet中的一個文檔中分頁。參數:field_name,doc_id,page,per_page
user = User(username='xiaoming')
user.save()
user = User.objects(username='xxx').first()
user.update(email='626004181@qq.com')
user = User.objects(username='xxx').first()
user.delete()
python連接mongodb集群
# pymongo
from pymongo import MongoClient
client = MongoClient('mongodb://admin:123456@ip1:port,ip2:port,ip3:port')# mongoengine
from mongoengine import connect
client = connect('user', host='mongodb://admin:123456@ip1:port,ip2:port,ip3:port')# flask_mongoengine
# setting.py
MONGODB_SETTINGS = [{'db': 'project1','host': '192.168.1.21','port': 27017,
},
{'db': 'project1','host': '192.168.1.21','port': 27017,
},
]
參考:
轉載于:https://www.cnblogs.com/cwp-bg/p/9473144.html
總結
以上是生活随笔為你收集整理的MongoDB之python简单交互(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。