我写了一个小脚本,将查询中的数据导出到.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:
添加循环,但我不知道接下来应该做什么:)
答案 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?