DJANGO:在project.settings.py文件中使用游标运行SQL查询



在我的项目中,我在"settings.py"中做了一些设置字段。文件可通过环境文件向用户公开来配置。因此,用户可以修改.env文件上的值,然后使用它来更新主项目settings.py文件中的设置字段。我想通过将其中一些值迁移到数据库来改进这一点,这样用户就可以通过产品的UI交互式地设置它们的值,而不必修改.env。我采取了以下方法:

  • 在DATABASES字典中声明默认数据库之后,我将实例化一个connection.cursor()以运行从数据库检索设置的原始SQL查询,如文档中所述。
  • 我操作游标的结果来构造一个字典,其中键是设置标识符,值是来自数据库的相关值,由用户设置。
  • 这个字典然后被用来给每个Django设置变量分配合适的值(例如SESSION_COOKIE_AGE,MEDIA_ROOT等)。因此,对于每个设置变量,而不是执行getenv,我使用相关键从字典中检索值。

我观察了settings.py中的代码行为,我可以看到每个设置值都被分配给正确的变量,这与使用之前的.env方法时的情况相同。问题是,当通过django.conf.settings或直接导入(from project.settings import SETTING)在代码中访问这些设置变量时,它们的值是一个空字符串,就好像它一开始没有被声明一样。

我注意到在光标实例化之前声明的设置(不管它们的值是硬编码的还是从.env中检索的)工作得很好。在Settings .py文件之外,光标之后的设置似乎不能保持它们的状态。

谁能告诉我为什么在settings.py中使用游标会使之后声明的所有设置字段无效?

我设法解决了这个问题。问题是我使用Django的connection模型(from django.db import connection),它在默认数据库上执行SQL查询。因为这是在settings.py中运行的,而项目还在它的设置过程中,它导致了上面描述的奇怪行为。

解决方案:不是使用django.db.connection(Django模型)来执行查询,而是使用Python的pyodbc库,这是项目中使用的数据库引擎。使用pyodbc,我能够建立一个连接到数据库,并运行我的查询(如这里所述),而不管Django的状态。

相关内容

  • 没有找到相关文章

最新更新