Удалить значения из таблицы db2, если они существуют в схеме в Python

#python #python-3.x #db2

#python #python-3.x #db2

Вопрос:

я хочу попросить небольшую помощь в моей проблеме. У меня есть sql-запрос, который получает все таблицы из некоторой схемы и помещает эти таблицы в список на Python. Например:

 tablesList = ['TABLE1','TABLE2',...]
  

После того, как я получу этот список таблиц, которые я хочу, я еще раз просматриваю каждую таблицу в цикле for, например:

 for t in range(len(tables)):
       table = tables[t]
       ...
       #here i want to check if this table exist in some db2 schema and if exist delete content  
       #of this table, otherwise go with next table check and don't delete content
  

Запрос для проверки будет:

 sql = """SELECT COUNT(*) FROM SYSIBM.SYSTABLES 
             WHERE TYPE = 'T' 
             AND CREATOR = 'MY_SCHEMA' 
             AND NAME = '{table}';""".format(table = table)

cursor.execute(sql)
rows_count = cursor.fetchone()
if rows_count is None:
    pass
else:
    delete...
  

Комментарии:

1. не помогло ли приведенное ниже запрос. sql = """SELECT COUNT(*) FROM SYSIBM.SYSTABLES WHERE TYPE = 'T' AND NAME = '{table}';""".format(table = table) выше перечислены записи вашей таблицы во всех схемах. Когда ваша схема ввода не совпадает. вы можете выбрать удаление содержимого. Я не вижу большой проблемы. Можете ли вы подробнее рассказать о проблеме, с которой вы столкнулись.

2. Почему бы не попытаться удалить содержимое напрямую, тот факт, что таблица существует при проверке в systables, не означает, что она все еще существует при попытке ее очистки, и это не означает, что вы можете удалить содержимое (нет полномочий, FK предотвращает удаление, одновременный доступ и т. Д.). Если это вызываетисключение, в котором SQLSTATE= 42704 / SQLCODE =-204, тогда оно не существует

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

4. Я говорю, что просто попробуйте удалить содержимое, если у вас нет ошибки, тогда таблица существует и теперь пуста, иначе у вас есть ошибка, которую вы можете игнорировать или нет на основе SQLSTATE или SQLCODE, возможно, это не идеально, но если вы проверяете с помощью SYSTABLES и обрабатываетезапуск дважды в параллельном режиме, тогда у вас есть, возможно, один процесс, в котором SYSTABLES говорит «да», а TRUNCATE TABLE говорит, что таблица не существует