【问题标题】:python django settings perform sql statementpython django设置执行sql语句
【发布时间】:2014-05-05 07:25:14
【问题描述】:

我想在我的 settings.py 文件中定义一个常量变量,它将在整个应用程序中可用。
即,如果我在我的 settings.py 中这样做,例如:
VAR = [1,2,3]

然后在我看来,我可以像这样访问它:
var = settings.VAR

但是,我希望从数据库中获取 VAR。
意味着,当我的应用程序启动时,将执行 SQL 并将答案加载到 VAR。

所以我尝试在 views.py 中创建一个函数来执行此操作:

在views.py中:

def loadVAR():  
... # perform sql 
return VAR

在settings.py中:

import myapp.views  
VAR = myapp.views.loadVAR() 

但它不起作用,我收到“500 内部服务器错误” 我也没有设法直接在设置中执行 SQL。

我怎样才能做到这一点?

【问题讨论】:

    标签: python sql django variables settings


    【解决方案1】:

    您可以在触摸视图之前使用中间件来实现这一点,

    class ModelMiddleware(object):
        """
            Model data
        """
        def process_request(self, request):
    
            # Fetch your data
            # Append var data to request
            request.META['VAR'] = [1, 2, 3]
            return None
    

    您可以使用请求获取 VAR,

    def veiw_data(request, ):
        print request.META['VAR']
    

    这里是How to set django middleware in settings file

    更新:

    如果你只想在第一次项目加载时调用sql,使用这种方式,

    我是这样想象我的项目结构的,

    mysite/
       mysite/
         __init__.py --> Add the logic in this file,
         urls.py
         settings.py
         test.py
       manage.py
    

    __init__.py

    from catalog.models import Product
    import settings
    
    settings.VAR = Product.objects.all()
    

    完成。您可以在项目中访问 VAR。希望这可能会有所帮助

    【讨论】:

    • 但是中间件不是会在每个请求上运行吗?我不需要它那样工作。我只想在服务器内存中拥有一些数据,这些数据可以在应用程序中为每个用户访问(与会话不同)。我需要执行这个只提取一次数据的 SQL,我不想为每个用户执行它。
    • 优秀。我实际上从未想过使用这个 init.py 文件(之前是空的)。但是,它奏效了!
    【解决方案2】:

    settings.py 不适合这样使用,如果您想在数据库中存储一些设置,请考虑使用为此设计的一些外部包,这里是其中的一些 the list

    【讨论】:

    • 我不想在我的数据库中存储“设置”,我需要一些数据库数据才能在我的应用程序中使用,而 settings.py 似乎是唯一具有始终可用变量的文件在应用程序中(与views.py 不同 - 响应后清除内存)。但我不介意为此创建另一个文件,其中将包含一些代码和数据,这些代码和数据将在应用程序启动时执行,并且在应用程序停止之前不会清理。这实际上是我需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多