вставить записи не отображаются в postgres - PullRequest
0 голосов
/ 22 декабря 2018

Я использую python для выполнения базового ETL для передачи записей из базы данных mysql в базу данных postgres.Я использую Python для начала передачи:

код Python

  source_cursor = source_cnx.cursor()
  source_cursor.execute(query.extract_query)
  data = source_cursor.fetchall()
  source_cursor.close()

  # load data into warehouse db
  if data:
    target_cursor = target_cnx.cursor()
    #target_cursor.execute("USE {};".format(datawarehouse_name))
    target_cursor.executemany(query.load_query, data)
    print('data loaded to warehouse db')
    target_cursor.close()
  else:
    print('data is empty')

Извлечение MySQL (extract_query):

SELECT `tbl_rrc`.`id`,
   `tbl_rrc`.`col_filing_operator`,
   `tbl_rrc`.`col_medium`,
   `tbl_rrc`.`col_district`,
   `tbl_rrc`.`col_type`,
    DATE_FORMAT(`tbl_rrc`.`col_timestamp`, '%Y-%m-%d %T.%f') as `col_timestamp` 
from `tbl_rrc`

PostgreSQL (loading_query)

INSERT INTO geo_data_staging.tbl_rrc
    (id,
    col_filing_operator,
    col_medium,
    col_district,
    col_type,
    col_timestamp)
    VALUES
    (%s,%s,%s,%s,%s);

Следует отметить, что для идентификатора есть ограничение PK.

Проблема в том, что, хотя у меня нет ошибок, я не вижу ни одной записи в целевой таблице.Я проверил это, вставив запись вручную, а затем снова запустив.Код выдал ошибку, нарушающую ограничение PK.Так что я знаю, что он находит стол.

Любое представление о том, чего мне не хватает, я был бы очень признателен.

1 Ответ

0 голосов
/ 22 декабря 2018

Используя psycopg2, вы должны вызвать commit() на своих курсорах, чтобы транзакции были зафиксированы.Если вы просто позвоните close(), транзакция неявно откатится.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...