python - 将值与字典进行比较

时间:2016-04-28 06:31:54

标签: postgresql python-2.7 sql-server-2008 dictionary

我写了一个小脚本,将查询中的数据导出到.csv文件。

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 个答案:

答案 0 :(得分: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

那,或者,如果你坚持在python中保留T,请尝试这里引用的伪造案例语句:Replacements for switch statement in Python?