Как реструктурировать приведенные ниже данные JSON, которые представляют собой набор результатов SQL-запроса с использованием курсоров в python.

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

Результат таков:

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

что я хочу это

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

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


person Yaswanth Kumar    schedule 31.01.2017    source источник
comment
Если вы используете SQL 2016, вы можете использовать FOR JSON и выполнить форматирование там. К сожалению, у меня нет опыта, чтобы помочь с аспектом Python. Ресурс, если вам интересно msdn.microsoft.com/en-us/library/ dn921882.aspx   -  person Xedni    schedule 01.02.2017
comment
Спасибо за ссылку! к сожалению, я использую SQL Server 2012   -  person Yaswanth Kumar    schedule 01.02.2017
comment
Это вряд ли прямая замена, но это заставило меня задуматься, как вы можете это сделать. Ответ на этот вопрос показался мне похожим на то, что вы пытаетесь сделать. stackoverflow.com/questions/23255512/   -  person Xedni    schedule 01.02.2017


Ответы (1)


 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
person Yaswanth Kumar    schedule 03.02.2017