将数据库变量设置为全局变量:Python



我正在尝试找出python中的全局变量,虽然有很多论坛帖子和示例,但没有一个真正符合我的需求。问题是:我正在使用MySQL数据库来接收11个不同的变量。这些变量用于控制目的,例如在特定时间和日期打开和关闭阀门。我需要这些变量是全局的,并且它们必须能够在许多其他文件中使用。目前,这些变量仅存在于读取数据库并为变量分配值的文件中。

这是我的问题:

当我从数据库导入变量时,是否可以简单地将它们分配给该脚本中的全局变量?喜欢这个:

cursor.execute ("select variable1,variable2,....variableN from transaction where TransactionNumber=(select MAX(TransactionNumber) from transaction)")
readfromdb= cursor.fetchone() 
variable1,variable2,.....variableN=list(readfromdb)
global variable1,variable2...variableN. 

然后将此文件导入我正在使用的每个其他文件中?

我尝试过使用此方法,但收到以下错误:

SyntaxError: name 'TransactionNumber' is assigned to before global declaration

我愿意接受其他建议,以使此过程更有效/简化。但我唯一的要求是当前正在读取数据库的脚本不得更改。它继续读取和分配数据库变量是一个基本要求。我不会让您厌烦细节,但该脚本对于检查我们从数据库中接收的数据并确保其格式正确以供使用至关重要,因为我们将从另一台计算机接收数据。

消息中有您的答案。 只需将global语句移动到首次使用任何变量的上方即可。

您必须在需要为任何这些名称分配新值的任何函数的顶部重复这些global声明。

胡安帕·阿里维拉加(Juanpa Arrivillaga(提出了很好的观点。 若要跨模块边界共享,需要使用模块名称来准确指定在哪个模块中定义它们。global语句实际上只有助于在单个模块中的函数和初始化代码之间共享名称。

如果"source1.py"创建了一个模块级("全局"(变量或函数name1,并且你想在"source2.py"中使用它,你必须在source2.py文件中import source1,然后将变量/函数称为"source1.name1"。

在这一点上,我真的建议查看字典或某种类型的自定义类或namedtuple对象。 你可以用全局变量来解决这个问题,但它最终会看起来像一只用两条腿走路的狗。 令人印象深刻的不是因为狗做得好,而是因为狗做得好。

我会使用对象、字典或命名元组来保存这些字段,以便整个混乱可以作为参数传递给函数。 全局变量变得混乱,尤其是在频繁更新的代码中。 这摆脱了所有这些global语句。 对象的类类型或命名元组的字段列表成为整个模块可以看到的单个定义点。

相关内容

  • 没有找到相关文章

最新更新