我是Python 3编程语言的新手。
我选择了RESTful Web服务作为Django-2.1和Djangorestframework。我将项目分为与here相同的多个环境。
以本地,开发和生产这样的方式来管理代码,以便不更改代码。只需在环境变量中传递文件即可。
为此,我删除了“ settings.py”文件,新文件结构如下所示:
mybackend/
|-- mybackend/
| |-- __init__.py
| |-- settings/
| | |-- __init__.py
| | |-- base.py
| | |-- dev.py
| | |-- prod.py
| |-- urls.py
| +-- wsgi.py
+-- manage.py
以上设置中,该文件包含数据库属性,即用户,通过,主机和端口。
现在,我想在“模型”模块之外使用这些属性。有什么方法可以获取数据库属性文件? 或通过其他任何方式获取数据库属性并建立数据库连接。
我尝试读取默认设置并尝试动态加载
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()