首页 > 解决方案 > Python:同一函数中所需变量的名称和“内容”

问题描述

contains 中的每个变量Queries都包含一个 SQL 查询。例如DF_Articles = 'Select * from Article_Master'. 出于这个原因pd.read_sql_query,我的部分功能有效。

什么不起作用:我想创建和存储以查询命名的 CSV 文件,每个文件都包含查询的内容。

但是当我尝试存储它们(即Query_csv.to_csv('SQL_data/{}.csv'.format(Query)))时,该变量Query包含整个 SQL 查询而不仅仅是名称(即DF_Articles)。是否有解决方法,或者我只是没有看到明显的东西?

Queries = [DF_TripHeader, DF_Articles]

def get_data_from_sql():
if not os.path.exists('SQL_data'):
    os.makedirs('SQL_data')

for Query in Queries:
    if not os.path.exists('SQL_data/{}.csv'.format(Query)):
        Query_DF = pd.read_sql_query(Query,Conn_SQL)
        Query_DF.to_csv('SQL_data/{}.csv'.format(Query))
    else:
        print('Already downloaded {}'.format(Query))

get_data_from_sql()

编辑:根据handras 和doctorlove 的输入进行了更改。现在可以了!

Queries = {"DF_TripHeader":DF_TripHeader,"DF_Articles":DF_Articles}

def get_data_from_sql():
if not os.path.exists('SQL_data'):
    os.makedirs('SQL_data')

for name, Query in Queries.items():
    if not os.path.exists('SQL_data/{}.csv'.format(name)):
        Query_csv = pd.read_sql_query(Query,Conn_SQL)
        Query_csv.to_csv('SQL_data/{}.csv'.format(name))
    else:
        print('Already downloaded {}'.format(name))

get_data_from_sql()`

标签: pythonpython-3.xpandas

解决方案


我会让收集器变量成为字典。

Queries = {"DF_TripHeader" : DF_TripHeader, "DF_Articles" : DF_Articles}

现在您可以像这样迭代它:

for name, query in Queries.items():
    ...

如果您觉得声明查询然后存储在字典中是多余的,您可以一步完成。

Queries = {
    "DF_TripHeader" : "Select * from TripHeader",
    "DF_Articles"   : "Select * from Article_Master"
}

推荐阅读