Нужна помощь в переборе ключей / значений в Python и вставке в базу данных SQL - PullRequest
0 голосов
/ 08 июня 2019

Я позвонил, чтобы запросить данные от Weight Gurus, который возвращает в формате словаря Python с ключами и значениями курса.Мне нужно взять данные, полученные из этого вызова, и вставить каждую пару ключ / значение в качестве отдельной строки.

До сих пор мне удалось получить данные от Weight Gurus, а также установить соединение с моей базой данных в python, но мне не повезло с повторением указания, чтобы вставить каждую пару значений в отдельную строку.


# Login and get the auth token
data = {"email": "", "password": ""}
login_response = requests.post("https://api.weightgurus.com/v3/account/login", data=data)
login_json = login_response.json()

# grab all your data
data_response = requests.get(
    "https://api.weightgurus.com/v3/operation/",
    headers={
        "Authorization": f'Bearer {login_json["accessToken"]}',
        "Accept": "application/json, text/plain, */*",
    },
)

scale_data_json = data_response.json()
for entry in scale_data_json["operations"]:
    print(entry)


import pyodbc    
server = ''
database = ''
username = ''
password = ''
driver='{ODBC Driver 13 for SQL Server}'

cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()

Словарь содержит 9 ключей.Каждый ключ - это столбец в моей таблице, который называется BodyComposition.Каждая пара ключ-значение должна быть отдельной строкой.Моя таблица также имеет поле ID приращения для первичного ключа, если это имеет значение.

1 Ответ

1 голос
/ 09 июня 2019

Рассмотрите возможность распаковки вашей коллекции словарей в кортежи ключ / значение, а затем параметризацию кортежа значений в цикле.Предполагая приведенную ниже структуру данных (список словарей):

scale_data_json["operations"] = [{'BMI': 0, 'BodyFat': 10, 
                                  'Entrytimestamp': '2018-01-21T19:37:47.821Z', 
                                  'MuscleMass': 50, 'OperationType': 'create',
                                  'ServerTimestamp':'2018-01-21T19:37:47.821Z', 
                                  'Source':'bluetooth scale', 
                                  'Water':37, 'Weight':21},
                                 {'BMI': 0, 'BodyFat': 10, 
                                  'Entrytimestamp': '2018-01-21T19:37:47.821Z', 
                                  'MuscleMass': 50, 'OperationType': 'create',
                                  'ServerTimestamp':'2018-01-21T19:37:47.821Z', 
                                  'Source':'bluetooth scale', 
                                  'Water':37, 'Weight':21},
                                ...]

Переберите каждый словарь, распакуйте значения с помощью zip и затем свяжите их в cursor.execute:

# PREPARED STATEMENT
sql = """INSERT INTO BodyComposition (BMI, BodyFat, Entrytimestamp, 
                                      MuscleMass, OperationType, ServerTimestamp, 
                                      Source, Water, Weight) 
         VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
      """

# LOOP, UNPACK, BIND PARAMS
for entry in scale_data_json["operations"]:
    keys, values = zip(*entry.items())
    cursor.execute(sql, values)
    cnxn.commit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...