MongoDB之python簡單交互(三)


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 col

if __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幾乎一樣。

  • 安裝orm
pip install flask_pymongo
  • 初始化
# extensions
from flask_pymongo import PyMongo

mongo = 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 MongoEngine

db = 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 db

app = Flask(__name__)
app.init_app(app=app)
  • 定義數據庫model
# models.py
from extensions import db

class 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,
},
]

參考:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM