2017-01-31 19 views
0
def query_db(query, args=(), one=False): 
cur = connection.cursor() 
cur.execute(query, args) 
r = [dict((cur.description[i][0], value) 
      for i, value in enumerate(row)) for row in cur.fetchall()] 
cur.connection.close() 
return (r[0] if r else None) if one else r 
my_query = query_db("select top 1 email as email_address,status = 'subscribed',firstname,lasstname from users") 
json_output = json.dumps(my_query) 
print json_output 

Результат таков:Как реструктурировать ниже данных JSON, который является результатом набор SQL запросов с использованием курсоров в питона

[{ 
    "status": "subscribed", 
    "lastname": "Engineer", 
    "email": "[email protected]", 
    "firstname": "The"}] 

, что я хочу это

{ 
    "email_address":"[email protected]", 
    "status":"subscribed", 
    'merge_fields': { 
     'firstname': 'yash', 
     'lastname': 'chakka', 
    } 

У меня нет столбца с именем merge-fields в базе данных, но я хочу этот заголовок слияния для каждого идентификатора электронной почты с именем и фамилией под ним, чтобы отправить его в Mailchimp. какую модификацию я должен сделать, чтобы мой курсор получил желаемый результат. Любая помощь будет оценена. Благодаря!

+0

Если вы» re running SQL 2016, вы можете использовать 'FOR JSON' и делать там форматирование. К сожалению, у меня нет опыта, чтобы помочь с аспектом python. Ресурс, если вы заинтересованы https://msdn.microsoft.com/en-us/library/dn921882.aspx – Xedni

+0

Спасибо за ссылку! К сожалению, я использую SQL Server 2012. –

+0

. Это вряд ли прямая замена, но это заставило меня задуматься над тем, как вы можете это сделать. Ответ на этот вопрос казался, что у него были некоторые сходные черты в том, что вы пытаетесь сделать. http://stackoverflow.com/questions/23255512/creating-nested-json-structure-with-multiple-key-values-in-python-from-json – Xedni

ответ

0
I'm adding this so that future users of mailchimp API version3 can get an idea of how I achieved this. 

Вот что я сделал, я добавил еще одну функцию, которая принимает значения в другом слове я захватить все значения, которые приведены в myquery и передать его на это ниже функции

def get_users_mc_format(query): 
users = query_db(query) 
new_list = [] 
for user in users: 
    new_list.append({ 
     "email_address": user["email"], 
     "status": user["status"], 
     "merge_fields": { 
      "FNAME": user["firstname"], 
      "LNAME": user["lastname"], 
     }, 
     "interests": { 
      "1b0896641e": bool(user["hardware"]), 
     } 
    }) 
return new_list