python通过mongoengine中connect函数连接多个数据库

mongoengine支持程序同时连接多个数据库,这些数据库可以位于一个或多个mongo之中,通过alias名称区分不同的连接即可。

可以通过switch_db切换到不同的数据库,进行读写操作,switch_db其实是一个上下文管理器,通过和with语句一起使用,能够保证切换数据库的影响范围。

由于个人电脑上没有安装mongodb,以下代码示例中访问的mongodb通过mongoengine提供的mock mongodb替代,只需要在connect函数参数中加上is_mock=True参数,并且安装有mongomock package(pip install mongomock)即可。

 

1 #!/usr/bin/env python
 2 # coding=utf-8
 3 from mongoengine import connect
 4 from mongoengine.document import Document
 5 from mongoengine.fields import StringField, IntField
 6 from mongoengine.context_managers import switch_db
 7 
 8 
 9 # 连接不同db
10 connect(alias='testdbA', is_mock=True)
11 connect(alias='testdbB', is_mock=True)
12 connect(alias='testdbC', is_mock=True)
13 
14 
15 class User(Document):
16     meta = {
17             # db_alias用于指定User绑定的mongo连接,和connect函数中的alias对应
18             'db_alias': 'testdbA',
19             }
20     uname = StringField(max_length=63)
21     uid = StringField(max_length=64)
22     age = IntField(default=0)
23 
24 
25 def create_record(uname, uid, age):
26     user = User()
27     user.uname = uname
28     user.uid = uid
29     user.age = age
30     return user
31 
32 def print_records(records):
33     # 输出User类此时绑定的db连接名称,并输出其记录个数
34     records = list(User.objects.all())
35     print('{} count:{}, records:'.format(User._meta['db_alias'], len(records)))
36     for rc in records:
37         print('    {}|{}|{}'.format(rc['uname'], rc['uid'], rc['age']))
38 
39 
40 records = list(User.objects.all())
41 print_records(records)
42 create_record('Ace', 'AX001', 10).save()
43 print_records(records)
44 
45 # switch到testdbB连接
46 with switch_db(User, 'testdbB'):
47     print_records(records)
48     create_record('Bob', 'BX001', 11).save()
49     print_records(records)
50 
51 # switch到testdbC连接
52 with switch_db(User, 'testdbC'):
53     print_records(records)
54     create_record('Carl', 'CX001', 12).save()
55     print_records(records)

 

你可能感兴趣的:(Python)