Как записать полученные объекты в MySQL базу

Всем привет, мне нужна помощь. Как мне полученные результат от Google Analytics API записать в подготовленную базу MySQL:

 from gaapi4py import GAClient
# if GOOGLE_APPLICATION_CREDENTIALS is set:
#c = GAClient() 
# or you may specify keyfile path:
c = GAClient(json_keyfile="etl1.json")


request_body = {
    'view_id': '211322015',
    'start_date': '2020-06-01',
    'end_date': '2020-06-30',
    'dimensions': {
        'ga:date',
        'ga:source',
        'ga:medium'
        
    },
    'metrics': {
        'ga:sessions'
    },
    'filter': '' # optional filter clause
}

response = c.get_all_data(request_body)

response['info'] # sampling and "golden" metadata

response['data'] # Pandas dataframe that contains data from GA

Я использую вот такой код https://prnt.sc/tez9bt


Ответы (1 шт):

Автор решения: Viktor Andriichuk
from gaapi4py import GAClient # библиотека для работы с API GA
import numpy # библиотека для работы с массивами
import psycopg2 # библиотека для подключения к БД postgresql
# подключаем файл-ключ, через который получаем доступ к api GA
c = GAClient(json_keyfile='etl1.json')
 
# получаем вчерашнюю дату и записываем в переменную yesterday
yesterday = datetime.date.fromordinal(datetime.date.today().toordinal()-1).strftime("%Y-%m-%d")
 
# тело запроса отправляемого в GA
request_body = {
    'view_id': '123304920',
    'start_date': yesterday, # ставим переменную со вчерашней датой
    'end_date': yesterday, # ставим переменную со вчерашней датой
    'dimensions': {
        'ga:date',
        'ga:dimension2', #  в этой переменной у меня записан client id
        'ga:dimension3', #  в этой переменной у меня записан session id
        'ga:sourceMedium'
    },
    'metrics': {
        'ga:sessions',
        'ga:goal5Completions',          
        
    },
 
}
 
response = c.get_all_data(request_body)
 
## Записываем ответ GA в dataframe
df=response['data']
 
 
# Преобразуем порядок столбцов, потому что из GA каждый раз получаем столбцы в разном порядке, 
# а нам нужны данные одного порядка для передачи в базу
df = df[['date', 'dimension2', 'dimension3', 'sourceMedium', 'sessions', 'goal5Completions']]
 
 
# конвертируем pandas df в список кортежей
sessions1 = df.to_records(index=False)
 
 
# преобразование данных из массива numpy в список
sessions=numpy.recarray.tolist(sessions1)
 
# Функция для подключения к БД
def create_connection(db_name, db_user, db_password):
    connection = None
    try:
        connection = psycopg2.connect(
            database=db_name,
            user=db_user,
            password=db_password,
 
        )
        print("Connection to PostgreSQL DB successful")
    except OperationalError as e:
        print(f"The error '{e}' occurred")
    return connection
    
    
# создаем подключение в качестве аргументов функции create_connection указываем название БД, имя пользователя и пароль
connection = create_connection(
    "postgres", "postgres", "password"
)
 
## Запись полученных строк в БД
sessions_records = ", ".join(["%s"] * len(sessions))
 
insert_query = (
    f"INSERT INTO ga (date_sessions, client_id, session_id, source_medium, sessions, goal) VALUES {sessions_records}"
)
connection.autocommit = True
cursor = connection.cursor()
cursor.execute(insert_query, sessions)
→ Ссылка