79 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
		
		
			
		
	
	
			79 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
|   | 
 | ||
|  | Other Databases
 | ||
|  | ===============
 | ||
|  | 
 | ||
|  | Connecting to "external" (non-app) :term:`databases<database>`
 | ||
|  | essentially works the same as for the :term:`app database`.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | WordPress Example
 | ||
|  | -----------------
 | ||
|  | 
 | ||
|  | As a somewhat contrived example, let's say the app needs to query a
 | ||
|  | WordPress database directly.
 | ||
|  | 
 | ||
|  | WuttJamaican only reserves a single config file section for itself,
 | ||
|  | which may vary (per :term:`app name`) but by default is ``wutta.db``:
 | ||
|  | 
 | ||
|  | .. code-block:: ini
 | ||
|  | 
 | ||
|  |    [wutta.db]
 | ||
|  |    default.url = sqlite://
 | ||
|  | 
 | ||
|  | But any other config file section is up for grabs.  Some other
 | ||
|  | packages may effectively reserve other sections, but if we assume
 | ||
|  | nobody has yet reserved the ``wordpress.db`` section, might add
 | ||
|  | something like:
 | ||
|  | 
 | ||
|  | .. code-block:: ini
 | ||
|  | 
 | ||
|  |    [wordpress.db]
 | ||
|  |    default.url = mysql://wutta:wuttapass@localhost/wordpress
 | ||
|  | 
 | ||
|  | Then in the app code you can load the connection(s) with
 | ||
|  | :func:`~wuttjamaican.db.conf.get_engines()`::
 | ||
|  | 
 | ||
|  |    from wuttjamaican.conf import make_config
 | ||
|  |    from wuttjamaican.db.conf import get_engines
 | ||
|  | 
 | ||
|  |    config = make_config()
 | ||
|  |    engines = get_engines(config, 'wordpress.db')
 | ||
|  | 
 | ||
|  | As you might imagine, "rinse and repeat" for other types of databases
 | ||
|  | besides WordPress.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | Multiple Databases
 | ||
|  | ------------------
 | ||
|  | 
 | ||
|  | As with the app database, you can have multiple databases per type.
 | ||
|  | 
 | ||
|  | To continue with the previous example, let's say you have a
 | ||
|  | "production" WordPress site but also a "staging" site and the app must
 | ||
|  | query both.
 | ||
|  | 
 | ||
|  | There should always be a "default" database chosen, so in this case
 | ||
|  | we'll choose "production" for that:
 | ||
|  | 
 | ||
|  | .. code-block:: ini
 | ||
|  | 
 | ||
|  |    [wordpress.db]
 | ||
|  |    keys = default, staging
 | ||
|  |    default.url = mysql://wutta:wuttapass@localhost/wordpress
 | ||
|  |    staging.url = mysql://wutta:wuttapass@localhost/wordpress_test
 | ||
|  | 
 | ||
|  | Then in the app code you can reference both a la::
 | ||
|  | 
 | ||
|  |    from sqlalchemy import orm
 | ||
|  |    from wuttjamaican.conf import make_config
 | ||
|  |    from wuttjamaican.db.conf import get_engines
 | ||
|  | 
 | ||
|  |    config = make_config()
 | ||
|  |    engines = get_engines(config, 'wordpress.db')
 | ||
|  | 
 | ||
|  |    Session = orm.sessionmaker()
 | ||
|  |    Session.configure(bind=engines['default'])
 | ||
|  | 
 | ||
|  |    prod_sess = Session()
 | ||
|  |    stag_sess = Session(bind=engines['staging'])
 |