Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将连接字符串设置为Azure函数中的应用程序设置/环境变量_Python_Azure_Environment Variables_Azure Functions_Appsettings - Fatal编程技术网

Python 将连接字符串设置为Azure函数中的应用程序设置/环境变量

Python 将连接字符串设置为Azure函数中的应用程序设置/环境变量,python,azure,environment-variables,azure-functions,appsettings,Python,Azure,Environment Variables,Azure Functions,Appsettings,在my Azure函数中,我为数据库连接字符串指定了环境变量/应用程序设置。当我使用VS代码和Python在Azure Data Science虚拟机上本地运行函数时,我可以使用环境变量 但是,当我将函数部署到Azure时,我得到一个错误:KeyValue为None,这意味着它找不到连接字符串的环境变量。请参阅错误: Exception while executing function: Functions.matchmodel Result: Failure Exception: KeyErr

在my Azure函数中,我为数据库连接字符串指定了环境变量/应用程序设置。当我使用VS代码和Python在Azure Data Science虚拟机上本地运行函数时,我可以使用环境变量

但是,当我将函数部署到Azure时,我得到一个错误:KeyValue为None,这意味着它找不到连接字符串的环境变量。请参阅错误:

Exception while executing function: Functions.matchmodel Result: Failure
Exception: KeyError: 'CONNECTIONSTRINGS:PDMPDBCONNECTIONSTRING'
Stack:   File "/azure-functions 
  host/workers/python/3.7/LINUX/X64/azure_functions_worker/dispatcher.py", line 315, in 
  _handle__invocation_request self.__run_sync_func, invocation_id, fi.func, args)
File "/usr/local/lib/python3.7/concurrent/futures/thread.py", line 57, in run
  result = self.fn(*self.args, **self.kwargs)
File "/azure-functions-host/workers/python/3.7/LINUX/X64/azure_functions_worker/dispatcher.py", 
  line 434, in __run_sync_func
  return func(**params)
File "/home/site/wwwroot/matchmodel/__init__.py", line 116, in main
File "/home/site/wwwroot/matchmodel/production/dataload.py", line 28, in query_dev_database
  setting = os.environ["CONNECTIONSTRINGS:PDMPDBCONNECTIONSTRING"]
File "/usr/local/lib/python3.7/os.py", line 679, in __getitem__
  raise KeyError(key) from None'
我尝试了以下解决方案:

添加了ConnectionString以指定Python脚本中的环境变量,从而使其在本地工作 setting=os.environ[ConnectionString:PDMPDBCONNECTIONSTRING]

使用logging.infoos.environ在控制台中输出我的环境变量。我的连接字符串已列出

在Azure功能门户中添加连接字符串作为应用程序设置

在Azure功能门户中将连接字符串添加为连接字符串。
有人有我可以尝试的其他解决方案吗?

在函数中,应用程序设置(如服务连接字符串)在执行过程中作为环境变量公开。您可以通过声明导入操作系统,然后使用

setting=os.environ[mysetting]

正如Alex所说,尝试从环境变量的名称中删除ConnectionString:。在azure门户中,只需在应用程序设置中添加mysetting作为keyName


在函数中,应用程序设置(如服务连接字符串)在执行期间作为环境变量公开。您可以通过声明导入操作系统,然后使用

setting=os.environ[mysetting]

正如Alex所说,尝试从环境变量的名称中删除ConnectionString:。在azure门户中,只需在应用程序设置中添加mysetting作为keyName


实际上,连接字符串几乎是正确的,但是使用了错误的前缀字符串。有关更多详细信息,请参阅此文档:

使用哪个字符串取决于您选择的类型,就像在我的测试中我使用的是自定义类型一样。然后我应该使用os.environ['CUSTOMCONNSTR\u testconnectionstring']来获取值

从文档中可以找到以下类型:

SQL Server:SQLCONNSTR_ MySQL:MYSQLCONNSTR_ SQL数据库:SQLAZURECONNSTR_ 自定义:CUSTOMCONNSTR_
实际上,连接字符串几乎是正确的,但是使用了错误的前缀字符串。有关更多详细信息,请参阅此文档:

使用哪个字符串取决于您选择的类型,就像在我的测试中我使用的是自定义类型一样。然后我应该使用os.environ['CUSTOMCONNSTR\u testconnectionstring']来获取值

从文档中可以找到以下类型:

SQL Server:SQLCONNSTR_ MySQL:MYSQLCONNSTR_ SQL数据库:SQLAZURECONNSTR_ 自定义:CUSTOMCONNSTR_
我在乔治的帮助下解决了这个问题,并选择了乔治的答案作为正确答案

我将代码更改为os.environ[SQLCONNSTR_PDMPDBCONNECTIONSTRING],但我也使用Azure命令行界面Azure CLI通过以下代码将包从VS代码部署到Azure。此代码使用local.Settings.json覆盖Azure应用程序设置

func azure functionapp发布-发布本地设置-i-覆盖设置-y

我认为这导致了对我在Azure应用程序设置SQL Server中指定的数据库类型的更改,因此当我以前尝试os.environ[SQLCONNSTR_PDMPDBCONNECTIONSTRING]时,它不起作用,因为我正在使用我的local.Settings.json覆盖我的Azure设置,而我的local.Settings.json没有指定数据库类型


通过使用名为Azure Functions的VS代码扩展Azure Functions:Deploy to Function应用程序进行部署,我最终实现了它。这保留了我在Azure应用程序服务中创建的设置

我在乔治的帮助下解决了这个问题,并选择了乔治的答案作为正确答案

我将代码更改为os.environ[SQLCONNSTR_PDMPDBCONNECTIONSTRING],但我也使用Azure命令行界面Azure CLI通过以下代码将包从VS代码部署到Azure。此代码使用local.Settings.json覆盖Azure应用程序设置

func azure functionapp发布-发布本地设置-i-覆盖设置-y

我认为这导致了对我在Azure应用程序设置SQL Server中指定的数据库类型的更改,因此当我以前尝试os.environ[SQLCONNSTR_PDMPDBCONNECTIONSTRING]时,它不起作用,因为我正在使用我的local.Settings.json覆盖我的Azure设置,而我的local.Settings.json没有指定数据库类型

通过使用名为Azure Functions的VS代码扩展Azure Functions:Deploy to Function应用程序进行部署,我最终实现了它。这保留了我在Azure应用程序服务中创建的设置

您可以尝试从t中删除ConnectionString:

环境变量的名称:可能会引起问题,我认为主要是关于Linux应用程序服务计划。请注意在代码和AppService的应用程序设置中删除它。我必须添加ConnectionString:才能让它在本地运行。在我添加密钥名称之前,它不会在本地运行。现在有更新吗?我可以编辑local.settings.json以删除ConnectionString:。我有嵌套的JSON并删除了它。现在,它只使用PDMPDBCONNECTIONSTRING在本地运行。正在尝试将其作为函数在Azure上运行。您可以尝试从环境变量的名称中删除ConnectionString::可能会引起问题,我认为主要是关于Linux应用程序服务计划。请注意在代码和AppService的应用程序设置中删除它。我必须添加ConnectionString:才能让它在本地运行。在我添加密钥名称之前,它不会在本地运行。现在有更新吗?我可以编辑local.settings.json以删除ConnectionString:。我有嵌套的JSON并删除了它。现在,它只使用PDMPDBCONNECTIONSTRING在本地运行。试图让它在Azure上仍能正常运行。我必须添加ConnectionString:才能让它在本地运行。在我添加密钥名之前,它不会在本地运行。我已经尝试部署到Azure函数,有连接字符串和没有连接字符串:;这两个选项都不起作用。您如何存储连接?您可以将其存储在这样的值下。是的,我将连接字符串存储为一个值,并为设置指定一个名称,就像您在mysetting中所做的那样。仍然不起作用。我发表了一篇关于一个稍微不同的问题的新帖子。如果可以,请回复!为了让它在本地运行,我必须添加ConnectionString。在我添加密钥名之前,它不会在本地运行。我已经尝试部署到Azure函数,有连接字符串和没有连接字符串:;这两个选项都不起作用。您如何存储连接?您可以将其存储在这样的值下。是的,我将连接字符串存储为一个值,并为设置指定一个名称,就像您在mysetting中所做的那样。仍然不起作用。我发表了一篇关于一个稍微不同的问题的新帖子。如果可以,请回复!我试过有前缀和没有前缀。当我在没有前缀的情况下部署它时,会自动添加前缀。当我将os.environ打印到控制台时,我可以看到前缀,我可以使用func.httpresponseptos.environ在Azure门户应用程序洞察中查看前缀。我可以看到正确的环境变量,但连接仍然不起作用。因此,您遇到了一个新问题:无法使用连接字符串连接数据库?因为这是不同的问题,假设你应该创建一个新问题。如果这对您有帮助,您可以接受它作为答案。我认为您不必指定连接字符串的类型。这将根据您在门户中的设置自动获取。我就一个稍微不同的问题发表了一篇新帖子。如果可以,请回复!所以你已经用我的方式解决了你的问题,如果这对你有帮助的话,你可以接受它作为答案。当我在没有前缀的情况下部署它时,会自动添加前缀。当我将os.environ打印到控制台时,我可以看到前缀,我可以使用func.httpresponseptos.environ在Azure门户应用程序洞察中查看前缀。我可以看到正确的环境变量,但连接仍然不起作用。因此,您遇到了一个新问题:无法使用连接字符串连接数据库?因为这是不同的问题,假设你应该创建一个新问题。如果这对您有帮助,您可以接受它作为答案。我认为您不必指定连接字符串的类型。这将根据您在门户中的设置自动获取。我就一个稍微不同的问题发表了一篇新帖子。如果可以,请回复!所以你已经用我的方式解决了你的问题,如果这对你有帮助,你可以接受它作为答案。