Я новичок в языке программирования Python 3.Я выбираю Django-2.1 и Djangorestframework для моих спокойных веб-сервисов.Я разделил проект на несколько сред, установив так же, как здесь .Код управляется таким образом, то есть локально, dev & prod, чтобы не изменять код.Просто передайте файл в переменную окружения.Для этого я удалил файл «settings.py», и новая структура файла выглядит следующим образом:
mybackend/
|-- mybackend/
| |-- __init__.py
| |-- settings/
| | |-- __init__.py
| | |-- base.py
| | |-- dev.py
| | |-- prod.py
| |-- urls.py
| +-- wsgi.py
+-- manage.py
Над настройками файл содержит свойства базы данных, например, user, pass, host & port.
Теперь я хочу использовать эти свойства вне модуля 'models'.Есть ли способ получить файлы свойств базы данных?Или любым другим способом получить свойство DB и установить соединение с базой данных.
Я попытался прочитать настройку по умолчанию и попытаться загрузить динамически
class ConnUtil:
def __init__(self):
self.file_name = os.environ.get("DJANGO_SETTINGS_MODULE")
self.host = ""
self.user = ""
self.password = ""
self.database = ""
self.port = 3306
# a class method to create a object.
@staticmethod
def get_conn():
file_name = os.environ.get("DJANGO_SETTINGS_MODULE")
env_file = "backend_jio_games.settings"
name = file_name;
name = name[name.rfind('.')+1:]
print(">>>>>> %r" % name)
if name == 'local':
print("Local")
env_file = env_file+".local.py"
elif name == 'dev':
print("Dev")
env_file = env_file + ".dev.py"
elif name == 'replica':
print("Replica")
env_file = env_file + ".replica.py"
else:
print("Prod")
env_file = env_file + ".prod.py"
print(">>>>>>>>>>" +env_file)
import env_file
#myConnection = pymysql.connect(host=hostname, user=username, passwd=password, db=database, port=port) # Mysql Connection
#return myConnection
Но я получаю сообщение об ошибке типа «Нет».модуль с именем env_file '.
Я хочу установить соединение с базой данных в зависимости от среды.
Заранее спасибо
Ниже приведенное решение сработало для меня
from django.conf import settings
from django.db import connections
from django.db.utils import OperationalError
import logging
logger = logging.getLogger('django')
class ConnUtil:
def __init__(self):
logger.debug("Conn Util Object created...")
self.cursor = None
# a class method to create a object.
def get_dbcursor(self):
logger.debug(">>>>>> %r" % settings.DATABASES)
db_conn = connections['default']
try:
self.cursor = db_conn.cursor()
except OperationalError:
logger.error("Error in opening cursor>>>>>>")
return self.cursor
def close_dbcursor(self):
logger.debug("closing cursor>>>>>>")
if self.cursor:
self.close_cursor()