mirror of
https://github.com/django/django.git
synced 2025-07-04 17:59:13 +00:00
[multi-db] Updated multiple_databases tests to use OTHER_DATABASES setting.
git-svn-id: http://code.djangoproject.com/svn/django/branches/multiple-db-support@3369 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
a5caa0ab27
commit
f51a9fa30c
@ -7,9 +7,13 @@ connections. Multiple database support is entirely optional and has
|
||||
no impact on your application if you don't use it.
|
||||
|
||||
Named connections are defined in your settings module. Create a
|
||||
`DATABASES` variable that is a dict, mapping connection names to their
|
||||
`OTHER_DATABASES` variable that is a dict, mapping connection names to their
|
||||
particulars. The particulars are defined in a dict with the same keys
|
||||
as the variable names as are used to define the default connection.
|
||||
as the variable names as are used to define the default connection, with one
|
||||
addition: MODELS.
|
||||
|
||||
The MODELS item in an OTHER_DATABASES entry is a list of the apps and models
|
||||
that will use that connection.
|
||||
|
||||
Access to named connections is through `django.db.connections`, which
|
||||
behaves like a dict: you access connections by name. Connections are
|
||||
@ -18,14 +22,10 @@ holds a `ConnectionInfo` instance, with the attributes:
|
||||
`DatabaseError`, `backend`, `get_introspection_module`,
|
||||
`get_creation_module`, and `runshell`.
|
||||
|
||||
Models can define which connection to use, by name. To use a named
|
||||
connection, set the `db_connection` property in the model's Meta class
|
||||
to the name of the connection. The name used must be a key in
|
||||
settings.DATABASES, of course.
|
||||
|
||||
To access a model's connection, use `model._meta.connection`. To find
|
||||
the backend or other connection metadata, use
|
||||
`model._meta.connection_info`.
|
||||
To access a model's connection, use its manager. The connection is available
|
||||
at `model._default_manager.db.connection`. To find the backend or other
|
||||
connection metadata, use `model._meta.db` to access the full ConnectionInfo
|
||||
with connection metadata.
|
||||
"""
|
||||
|
||||
from django.db import models
|
||||
@ -36,10 +36,8 @@ class Artist(models.Model):
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class Meta:
|
||||
db_connection = 'django_test_db_a'
|
||||
|
||||
|
||||
class Opus(models.Model):
|
||||
artist = models.ForeignKey(Artist)
|
||||
name = models.CharField(maxlength=100)
|
||||
@ -47,9 +45,6 @@ class Opus(models.Model):
|
||||
|
||||
def __str__(self):
|
||||
return "%s (%s)" % (self.name, self.year)
|
||||
|
||||
class Meta:
|
||||
db_connection = 'django_test_db_a'
|
||||
|
||||
|
||||
class Widget(models.Model):
|
||||
@ -59,9 +54,6 @@ class Widget(models.Model):
|
||||
def __str__(self):
|
||||
return self.code
|
||||
|
||||
class Meta:
|
||||
db_connection = 'django_test_db_b'
|
||||
|
||||
|
||||
class DooHickey(models.Model):
|
||||
name = models.CharField(maxlength=50)
|
||||
@ -69,9 +61,6 @@ class DooHickey(models.Model):
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class Meta:
|
||||
db_connection = 'django_test_db_b'
|
||||
|
||||
|
||||
class Vehicle(models.Model):
|
||||
@ -92,11 +81,11 @@ API_TESTS = """
|
||||
['django_test_db_a', 'django_test_db_b']
|
||||
|
||||
# Each connection references its settings
|
||||
>>> connections['django_test_db_a'].settings.DATABASE_NAME == settings.DATABASES['django_test_db_a']['DATABASE_NAME']
|
||||
>>> connections['django_test_db_a'].settings.DATABASE_NAME == settings.OTHER_DATABASES['django_test_db_a']['DATABASE_NAME']
|
||||
True
|
||||
>>> connections['django_test_db_b'].settings.DATABASE_NAME == settings.DATABASES['django_test_db_b']['DATABASE_NAME']
|
||||
>>> connections['django_test_db_b'].settings.DATABASE_NAME == settings.OTHER_DATABASES['django_test_db_b']['DATABASE_NAME']
|
||||
True
|
||||
>>> connections['django_test_db_b'].settings.DATABASE_NAME == settings.DATABASES['django_test_db_a']['DATABASE_NAME']
|
||||
>>> connections['django_test_db_b'].settings.DATABASE_NAME == settings.OTHER_DATABASES['django_test_db_a']['DATABASE_NAME']
|
||||
False
|
||||
|
||||
# Invalid connection names raise ImproperlyConfigured
|
||||
@ -105,20 +94,17 @@ Traceback (most recent call last):
|
||||
...
|
||||
ImproperlyConfigured: No database connection 'bad' has been configured
|
||||
|
||||
# Models can access their connections through their _meta properties
|
||||
>>> Artist._meta.connection.settings == connections['django_test_db_a'].settings
|
||||
# Models can access their connections through their managers
|
||||
>>> Artist.objects.db == connections['django_test_db_a']
|
||||
True
|
||||
>>> Widget._meta.connection.settings == connections['django_test_db_b'].settings
|
||||
>>> Widget.objects.db == connections['django_test_db_b']
|
||||
True
|
||||
>>> Vehicle._meta.connection.settings == connection.settings
|
||||
>>> Vehicle.objects.db.connection == connection
|
||||
True
|
||||
>>> Artist._meta.connection.settings == Widget._meta.connection.settings
|
||||
>>> Artist.objects.db == Widget.objects.db
|
||||
False
|
||||
>>> Artist._meta.connection.settings == Vehicle._meta.connection.settings
|
||||
>>> Artist.objects.db.connection == Vehicle.objects.db.connection
|
||||
False
|
||||
|
||||
# Managers use their models' connections
|
||||
|
||||
>>> a = Artist(name="Paul Klee", alive=False)
|
||||
>>> a.save()
|
||||
>>> w = Widget(code='100x2r', weight=1000)
|
||||
@ -128,8 +114,6 @@ False
|
||||
>>> artists = Artist.objects.all()
|
||||
>>> list(artists)
|
||||
[<Artist: Paul Klee>]
|
||||
>>> artists[0]._meta.connection.settings == connections['django_test_db_a'].settings
|
||||
True
|
||||
|
||||
# When transactions are not managed, model save will commit only
|
||||
# for the model's connection.
|
||||
|
Loading…
x
Reference in New Issue
Block a user