在我的应用程序中,我经常查询数据库以获取表中的列列表。查询显然在计算上和时间上都很昂贵。我想将此查询添加到配置文件中,以便我的应用程序中的其他模块可以引用配置文件,而无需每次都查询数据库。但是,我不想对列进行硬编码,以确保与未来可能没有相同列的数据库的交叉兼容性。
所以我的问题是:
如果我的配置文件中有table_columns = db.query()
语句作为全局变量。每次导入配置文件时都会执行此语句吗?或者每次我引用变量?或者,当应用程序首次设置为运行时,是否会初始化所有模块中的所有全局变量,因此查询只会被调用一次?
答案 0 :(得分:1)
您的代码按特定顺序执行。 Python是动态类型语言。因此,它以特定的顺序执行代码,例如。
假设您有两个模块:
main.py
settings.py
在main.py
中这是您的代码:
import settings
if __name__ == '__main__':
b = 4
print(settings.a)
在settings.py
中你有这样的代码:
a = 2
如果直接用settings.py
调用python settings.py
,则python会创建对象'a'变量。
如果用python main.py调用main.py
,那么Python将首先import settings
,因为这是执行模块中的第一行,首先创建变量'a'
,因为它导入{{1}模块进入它并运行其中的所有内容然后它返回main并创建变量settings
然后它打印对象b
的值(引用的变量名为'a'
值2。)
我希望我的解释是正确的。如果没有,那么请纠正我。旁注:
当它创建对象时,它会存储其名称及其值,并且两者都存储在内存中的两个不同位置。然后,对象的名称将引用该对象的值。我认为值得记住它。
答案 1 :(得分:0)
溶液:
#db_utils.py
table_column=None
def init_columns():
global table_column
table_column=db.query()
在其他文件上
import db_utils
#call it one time dont forget to call it
db_utils.init_columns()
#every time you want to access it without executing
db_utils.table_column