You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何去除表名的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 12:00:27