我做了一个小测试(但没有事务,但我认为它可能有效)
我在Django的设置中设置了2个数据库:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb',
'USER': 'mydb',
'PASSWORD': 'mydb',
'HOST': '127.0.0.1',
'PORT': '3306',
},
'alias': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb',
'USER': 'mydb',
'PASSWORD': 'mydb',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
然后我在Django shell中执行了以下操作:
Table1.objects.using('default').all()
Table1.objects.using('alias').all()
Table2.objects.using('default').all()
Table2.objects.using('alias').all()
在同一时间,我在mysql中执行了以下操作:
mysql> show processlist;
+------+------+-----------------+------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
| 1314 | mydb | localhost:40224 | mydb | Query | 0 | NULL | show processlist |
| 1315 | mydb | localhost:40225 | mydb | Sleep | 5 | | NULL |
| 1316 | mydb | localhost:40226 | mydb | Sleep | 5 | | NULL |
+------+------+-----------------+------+---------+------+-------+------------------+
因此,我认为每个数据库都需要一个事务(实际上它们是同一个数据库)。