如何去除表名的stg_前缀生成目标表名?解决strip方法无效问题
解决STG表迁移DW时去除前缀并添加后缀的问题
问题原因
你用的strip('stg_')无法精准移除前缀是因为:strip()方法是移除字符串首尾所有属于指定字符集合(这里是s、t、g、_)的字符,不是专门移除固定前缀。比如如果表名是stg_order,f'{tab}_BIC'.strip('stg_')可能碰巧去掉开头的stg_,但逻辑不严谨,且如果表名结构特殊(比如stg_stg_log)就会出错,同时你是先拼接_BIC再处理,顺序也不对。
正确解决方案
方案1:Python 3.9+ 推荐用法
用str.removeprefix()方法精准移除前缀stg_,再拼接_BIC后缀:
target_tab = tab.removeprefix('stg_') + '_BIC'
方案2:兼容Python 3.8及以下版本
先判断表名是否以stg_开头,再截取前缀后的部分,最后加后缀:
if tab.startswith('stg_'): target_tab = tab[4:] + '_BIC' else: target_tab = tab + '_BIC' # 兼容无前缀的特殊表
修改后的完整代码
for tables in cursor.fetchall(): tab = tables[0] select_stg_query = f"""SELECT * from {tab}""" try: df_select=pd.read_sql(select_stg_query, conn, chunksize=10000) warnings.filterwarnings("ignore") except Exception as e: logger.exception(e) continue try: engine = sa.create_engine(f'mssql+pyodbc://@{target_server}/{target_database}?trusted_connection=yes&driver={target_driver}') # 生成目标表名 target_tab = tab.removeprefix('stg_') + '_BIC' for chunk_dataframe in df_select: rowcount = chunk_dataframe.to_sql(target_tab, engine, if_exists='append', index=False, method='multi', chunksize=10) warnings.filterwarnings("ignore") print(f"{rowcount} Records inserted into {target_tab}") engine.dispose()
内容的提问来源于stack exchange,提问作者hashdif
相关产品推荐
相关产品推荐

