#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 говорит, что таблица не существует