连接MongoDB
要连接一个 mongod实例, 需要用到 connect()
函数。分不同情况需提供不同的连接参数。
1、 默认情况,指mongod运行在localhost且端口为27017)
只需要提供需要连接的数据库名即可:
from mongoengine import connect
connect('project1')
2、mongod运行在其他服务器或者端口不为默认27107端口
from mongoengine import connect
connect('project1', host='192.168.1.35', port=12345)
3、需要用户登陆验证
from mongoengine import connect
connect('project1', username='webapp', password='pwd123', authentication_source='admin')
4、URI连接方式
将URI给host
参数赋值
from mongoengine import connect
connect('project1', host='mongodb://localhost/database_name')
注意
如URI包含数据库名,用户名或者密码,将会覆盖相应参数的传值。如以下例子,连接的数据库将会是production,用户名为admin,密码为qwerty。
from mongoengine import connect
connect(
db='test',
username='user',
password='12345',
host='mongodb://admin:qwerty@localhost/production'
)
连接副本集
from mongoengine import connect
# Regular connect
connect('dbname', replicaset='rs-name')
# MongoDB URI-style connect
connect(host='mongodb://localhost/dbname?replicaSet=rs-name')
多数据库连接
连接多个数据库可以使用 connect()
并设置别名参数alias
,如没有设置别名,则默认为 “default” 。
connect(db='test01', alias='testdbA')
connect(db='test02', alias='testdbB')
connect(db='test03', alias='testdbC')
也可以使用 register_connection()
进行多个数据库连接信息的存储。
register_connection(
alias="default",
db='test'
)
当单独Document类需要调用特定数据库时,只需要在meta的 db_alias
设置对应的数据库别名即可。
class User(Document):
name = StringField()
meta = {'db_alias': 'user-db'}
class Book(Document):
name = StringField()
meta = {'db_alias': 'book-db'}
class AuthorBooks(Document):
author = ReferenceField(User)
book = ReferenceField(Book)
meta = {'db_alias': 'users-books-db'}
上下文管理
切换数据库
使用switch_db
,提供需要切换数据库的类与所需切换到的数据库别名即可进行切换数据库。
from mongoengine.context_managers import switch_db
class User(Document):
name = StringField()
meta = {'db_alias': 'user-db'}
with switch_db(User, 'archive-user-db') as User:
User(name='Ross').save() # Saves the 'archive-user-db'
切换集合(数据表)
使用 switch_collection
,提供需要切换集合的类与所需切换到的集合名即可进行切换集合。
from mongoengine.context_managers import switch_collection
class Group(Document):
name = StringField()
Group(name='test').save() # Saves in the default db
with switch_collection(Group, 'group2000') as Group:
Group(name='hello Group 2000 collection!').save() # Saves in group2000 collection
注意
使用上下文管理之前,需使用 register_connection()
或 connect()
登记需要使用到的数据库信息。