我有一个Python脚本,用于从数据库表中删除记录。其中一些表的数据量很大,例如500M条记录。在每个删除语句之后都有日志语句,但是日志语句没有被打印出来,但可以看到数据在数据库中被清除。
以下是代码片段:
del_query = "delete from {source_schema}.RAW_TAB where raw_tab_id in " \
"(select RAW_TAB_ID from {source_schema}.RAW_TAB_1 where T1_ID in ({t1_list})) " \
.format(source_schema=source_schema, t1_list=t1_list)
logger.info("Deletion iteration started from source")
logger.debug("Executing query :\n {} for ".format(del_query))
cursor.execute(del_query)
del_query = "delete from {source_schema}.RAW_TAB_1 where T1_ID in ({t1_list}) " \
.format(source_schema=source_schema, t1_list=t1_list)
logger.debug("Executing query :\n {}".format(del_query))
cursor.execute(del_query)
在上述语句中,
t1_list
是逗号分隔的值,例如 t1,t2,t3
等等。我传递了大小为50的集合。因此,应该从这些具有大容量的表中删除多个记录。此处给出的示例代码是方法的一部分,并且该方法被调用多次,直到删除所有记录为止。因此,想要了解为什么未打印日志语句,但后续的删除语句正在得到正确执行。当我运行脚本时,我不确定是否正在进行清除,直到我在数据库中查询。当我使用相同的脚本清除体积较小的表时,清除会正常进行。因此,问题出现在表规模较大时。Python 的字符串格式化方法是否存在某些长度限制,只能接受某种长度的字符串?还是记录实现存在问题。
日志声明如下:
import logging
logger = logging.getLogger('sspurge.' + __name__)
Python 3.8 中使用的版本