2016-04-28 128 views
0

我寫了一個小的腳本,其中的數據從查詢導出到.csv文件。python - 比較值與字典

try: 
    connection = pyodbc.connect ('DRIVER={SQL Server};SERVER=xxxx ;DATABASE=xxxx;UID=xxxx;PWD=xxxx') 
    cursor = connection.cursor() 
    conn = psycopg2.connect("dbname='xxxx' user='xxxx' host='xxxx' password='xxx'") 
    cur=conn.cursor() 

    try: 

     query = """select .....;""" .format(yy,mm) 
     cursor.execute(query) 
     results1 = cursor.fetchall() 

     query1 = """SELECT .....""".format(yy,mm) 
     cur.execute(query1) 
     results2 = cur.fetchall() 
     results = results1 + results2 
     cursor.close() 
     cur.close() 

for row in results: 
    name = row[0].split('_',1)[0] 
    print name 

使用符號'_'的最後一行切片結果,我從中選擇第一個元素。所以結果會是這樣:代碼

1-GRB-809 
1-HDX-252 
539ZWU 
EUM-505 

下一頁部分負責將數據導出到.csv

csv_file = open('errors.csv','wb') 
myFile = csv.writer(csv_file) 
myFile.writerows(results) 
csv_file.close() 

我的代碼創建了字典中的功能之前。

def region(name): 

dict = { 
'1-GRB-809':'EMEA', 
'1-HDX-252':'EMEA', 
'539ZWU':'NAM', 
'EUM-5059':'NAM', 
} 

什麼,我試圖做的是從字典切片數據比較值,替換它的值,並在.csv文件添加結果新柱爲好。(有關係的查詢結果)。我應該怎麼做?我假設我需要將循環添加到函數區域for name in dict:,但我不知道接下來應該做什麼:)

回答

1

聽起來像您正在嘗試在ETL中執行T(轉換)。

我建議在做SQL數據操作,而不是Python作爲SQL代碼的聲明,你可以在你的查詢只寫:

select *, case when Name in ('1-GRB-809',''1-HDX-252'') then 'EMEA', 
    case when Name in ('539ZWU','EUM-5059') then 'NAM' else null end as Region 
from Table 

也就是說,或者,如果你堅持保留的T在python,嘗試僞case語句作爲參考這裏:Replacements for switch statement in Python?

+0

事實上,我需要這個函數DEF F(X): 返回{ 'A':1, 'b':2, } [X] –