Django: dynamic database file

前端 未结 3 2013
我在风中等你
我在风中等你 2020-12-02 19:06

In my Django project I have a dependency for a third party application that produces SQLite cache files in various directories with a known schema.

I\'d like to use

相关标签:
3条回答
  • 2020-12-02 19:48

    You can register database in DATABASES settings.

    from your_project import settings
    database_id = "unqique_name"
    new_database = {}
    new_database["id"] = database_id
    new_database['ENGINE'] = 'django.db.backends.sqlite3'
    new_database['NAME'] = '/project/data/db_%s.sql' % database_id
    new_database['USER'] = ''
    new_database['PASSWORD'] = ''
    new_database['HOST'] = ''
    new_database['PORT'] = ''
    settings.DATABASES[database_id] = new_database
    

    You can but you shouldn't.

    0 讨论(0)
  • 2020-12-02 20:01

    The django.db.connections is a simple wrapper around DATABASES defined in your settings. The wrapper class is here: django.db.utils#L137-L227

    from django.db import connections
    
    # Add connection information dynamically..
    connections.databases['new-alias'] = { ... }
    # Ensure the remaining default connection information is defined.
    # EDIT: this is actually performed for you in the wrapper class __getitem__
    # method.. although it may be good to do it when being initially setup to
    # prevent runtime errors later.
    # connections.databases.ensure_defaults('new-alias')
    
    # Use the new connection
    conn = connections['new-alias']
    
    0 讨论(0)
  • 2020-12-02 20:07

    Assuming the only engine used is SQLite and the location of the (only) database file is what varies, provide a callable to the NAME:

    def get_db_loc():
        # code to determine filesystem location of database
        return location
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': get_db_loc(),
            # More config goes here
        }
    }
    
    0 讨论(0)
提交回复
热议问题