@missbells

Как подключится к базе данных используя конфигурационный файлы *.ini?

Помогите, пожалуйста, разобраться.
У меня есть метод получения данных из бд и в нем есть строка подключения:
connection_string = 'mysql://test:test@localhost/test_db'
e = create_engine(connection_string, echo=True)

Как можно изменить метод, чтобы он получал строку подключения из файла конфигурации(development.ini или какого-то кастомного db.ini из корневой папки)

В официальной документации есть пример:
код
from pyramid.config import Configurator
from sqlalchemy import engine_from_config
from .models import DBSession, Base

def main(global_config, **settings):
    engine = engine_from_config(settings, 'sqlalchemy.')
    DBSession.configure(bind=engine)
    Base.metadata.bind = engine

    config = Configurator(settings=settings,
                          root_factory='tutorial.models.Root')
    config.include('pyramid_chameleon')
    config.add_route('wiki_view', '/')
    config.add_route('wikipage_add', '/add')
    config.add_route('wikipage_view', '/{uid}')
    config.add_route('wikipage_edit', '/{uid}/edit')
    config.add_static_view('deform_static', 'deform:static/')
    config.scan('.views')
    return config.make_wsgi_app()
def main(global_config, **settings):
    engine = engine_from_config(settings, 'sqlalchemy.')

В файле development.ini находится эта строка
[app:main]
use = egg:tutorial
pyramid.reload_templates = true
pyramid.includes =
    pyramid_debugtoolbar
    pyramid_tm

sqlalchemy.url = sqlite:///%(here)s/sqltutorial.sqlite

и по префиксу "sqlalchemy." получаем строку подключения.
Но как я понимаю, то эта настройка будет работать, только для метода main.

Подскажите, пожалуйста, как можно реализовать данный подход для любого метода используя engine_from_config(), например:
def save(request):
    data = request.json_body
    user_hash = sha1(json.dumps(data).encode('utf-8')).hexdigest()
    user = json.dumps(data.get("user"))
    settings = data.get("settings")
    s = orm.Session()
    try:
        connection_string = 'mysql://user_db:user_db@localhost/user_db'
        e = create_engine(connection_string, echo=True)
        meta = MetaData(bind=e, reflect=True)
        ...
  • Вопрос задан
  • 162 просмотра
Пригласить эксперта
Ответы на вопрос 1
@ariezzz_python
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы