2016-03-14 44 views
2

我有這有它取決於正在傳遞例如參數一串SQL查詢的Python文件會是這樣的:蟒蛇=存儲多個SQL查詢

if args.monitor == 'Argument One': 
    sql_query = """select a, b, c from tableA where a = 123""" 
elif args.monitor == 'Argument Two': 
    sql_query = """select d, e, f from TableA where d = 456""" 
elif .... 

這將繼續對約10種不同複雜度的查詢。

很明顯,這會造成一團糟的代碼,更新和/或添加SQL查詢涉及到大量的代碼。我想要做的是將某些字典中的查詢/參數部分。是否有可能使用一個配置文件來達到這個目的,我可以做如下的事情?

[query] 
Argument A = select a, b, c from tableA where a = 123 
Argument B = select d, e, f from TableA where d = 456 

然後通過ConfigParser調用。我擔心的是,一些查詢是相當長的(最多10行),所以我怎麼會在配置文件中表示?

或者我將保存每個查詢的路線爲ArgumentA.sql,然後列出目錄,如果參數匹配,然後使用該SQL?

有沒有人接近這樣的情景?

+0

查詢保持人類可讀性(即換行符)很重要嗎? – lucasnadalutti

+0

其意圖是,他們將不得不保持這麼好,需要保持人的可讀性。 – whoisearth

回答

1

將每個參數與相應查詢相關聯的字典似乎是最好的主意。考慮到這一點,我看到這種方法

1)有一個常數在文件的頂部,包含此字典。例如爲:

ARGUMENTS_DICT = { 
    'Argument One': (
     'select *' 
     'from table' 
     'where etc' 
    ), 
    ... 
} 

2)具有在另一個文件(Python模塊相同的常數),並將其導入到當前的模塊。例如: -

from .arguments_dict import ARGUMENTS_DICT 

3)有了這個字典作爲一個JSON文件JSON對象,並使用Python的json module將其加載爲一個字典。這裏的缺點是,爲了保持查詢的可讀性,每個查詢需要在列表元素中拆分,並在Python中加載時加入。例如:

// arguments_dict.json 
{ 
    'Argument One': [ 
     'select *', 
     'from table', 
     'where etc' 
    ], 
    ... 
}