2016-04-28 192 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] –