Заполнение таблицы значениями из другой таблицы, если идентификатор отсутствует в таблице DWH - PullRequest
0 голосов
/ 10 февраля 2020

Я выполняю задачу ETL, где запрашиваю таблицы в хранилище данных, чтобы узнать, содержит ли они идентификаторы в кадре данных (df), который был создан путем объединения таблиц из оперативной базы данных.

enter image description here

Фрейм данных имеет только столбцы идентификаторов из каждой объединенной таблицы в оперативной базе данных. Я создал переменную для каждого из этих столбцов, например, 'billing_profiles_id', как показано ниже:

billing_profiles_dim_id = df['billing_profiles_dim_id'] 

Я пытаюсь повторять строку за строкой, чтобы увидеть, находится ли здесь идентификатор в таблице 'billing_profiles_dim' Хранилище данных. Там, где идентификатор отсутствует, я хочу заполнить таблицы DWH построчно, используя соответствующие строки идентификатора в ODB:

for key in billing_profiles_dim_id:
    sql = "SELECT * FROM billing_profiles_dim WHERE id = '"+str(key)+"'"
    dwh_cursor.execute(sql)
    result = dwh_cursor.fetchone()
if result == None:
    sqlQuery = "SELECT * from billing_profile where id = '"+str(key)+"'"
    sqlInsert = "INSERT INTO billing_profile_dim VALUES ('"+str(key)+"','"+billing_profile.name"')
    op_cursor = op_connector.execute(sqlInsert)
    billing_profile = op_cursor.fetchone()

По крайней мере, до сих пор я получаю следующую ошибку:

SyntaxError: EOL while scanning string literal

Это сообщение об ошибке указывает на закрытие баркета на

sqlInsert = "INSERT INTO billing_profile_dim VALUES ('"+str(key)+"','"+billing_profile.name"')

, которое в настоящее время я не могу решить. Я также знаю, что этот код может столкнуться с другой проблемой или двумя. Может кто-нибудь посмотреть, как я могу решить текущую проблему и, пожалуйста, убедитесь, что я иду по правильному пути?

1 Ответ

1 голос
/ 10 февраля 2020

Вам не хватает двойного тика и +

sqlInsert = "INSERT INTO billing_profile_dim VALUES ('"+str(key)+"','"+billing_profile.name+"')"

Но вы действительно должны перейти к подготовленным утверждениям, таким как

sql = "SELECT * FROM billing_profiles_dim WHERE id = '%s'"
dwh_cursor.execute(sql,(str(key),))
...
sqlInsert = ('INSERT INTO billing_profile_dim VALUES  '
       '(%s, %s )')
dwh_cursor.execute(sqlInsert , (str(key), billing_profile.name))
...