Задать вопрос
@Radiss

Доступ к базе по ссылке?

Есть 2 бд - POSTGRESQL и SQLITE

Как написать функцию, которая принимает на вход строку
вида postgres://admin:oocooSh7@postgres.host:5432/my_db, а превращает её в
словарик с полями.

То есть такая ссылка воспринимается как postgres://:@:
/
Все значения - это строки, словарь одноуровневый и это
то, что подходит по ключу, например, 'default' в словаре DATABASES в настройках
джанги.

При этом, если на вход приходит строка
вида sqlite:///C:/Users/admin/site_db.sqlite3, то это превратится в другой
словарик:
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'C:/Users/admin/site_db.sqlite3'
}e lang="python">


То есть такая строчка будет восприниматься как sqlite:///

В этом варианте должно быть меньше полей в словаре, использоваться другой ENGINE и
в качестве NAME используется переданный путь к базе.

Задача - написать такую функцию типа parse_db_url которая, допустим, будет
принимать один аргумент на вход: собственно путь к базе. На выход функция
должна возвращать словарь с разными полями в зависимости от того, что в неё
передали.

def parse_db_url(db_link):
...


Пример
parse_db_url("postgres://admin:oocooSh7@postgres.host:5432/my_db")

{
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'USER': 'admin',
'PASSWORD': 'oocooSh7',
'HOST': 'postgres.host',
'PORT': '5432',
'NAME': 'my_db'
}


Пример
parse_db_url("sqlite:///C:/Users/admin/site_db.sqlite3")

{
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'C:/Users/admin/site_db.sqlite3'
}
  • Вопрос задан
  • 111 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
NeiroNx
@NeiroNx
Программист
>>> from urllib.parse import urlparse
>>> u = urlparse("postgres://admin:oocooSh7@postgres.host:5432/my_db")
>>> u.password
'oocooSh7'
>>> u.username
'admin'
>>> u.hostname
'postgres.host'
>>> u.port
5432
>>> u.path
'/my_db'
>>> us = urlparse("sqlite:///C:/Users/admin/site_db.sqlite3")
>>> us.path
'/C:/Users/admin/site_db.sqlite3'
>>> us.scheme
'sqlite'
>>>

Думаю дальше сами справитесь.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@galaxy
А в чем проблема распарсить строку?
Хотите регуляркой, но тут и str.split() справится.
Правда, будут интересности, если в пароле допустима пунктуация...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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