Python循环生成Teradata插入语句无报错但未插入数据求助
问题排查:Python操作Teradata无报错但未插入数据
问题场景
作为Python新手,需要从Teradata的大量表中提取campaign_start字段,插入到新表CP.test1234中。编写的Python代码运行无报错,但未插入任何数据;手动执行打印出的SQL语句却能成功。
原代码
cur.execute("SELECT concat('CP.',TableName)FROM DBC.TablesV WHERE TableKind = 'T' and DatabaseName = 'CP' and TableName like 'ALB_%' and length (tablename)=23;") for row in cur.fetchall(): if row[0] not in [""]: #print(f"insert into CP.test1234 select distinct campaign_start from {row[0]};") f"insert into CP.test1234 select distinct campaign_start from {row[0]};"
问题原因及解决方法
核心问题:未执行生成的SQL语句
原代码仅构造了插入SQL的字符串,但没有调用cur.execute()方法去实际执行这条SQL。相当于只是定义了字符串,没有触发数据库的插入操作。次要问题:可能缺少事务提交
Teradata的Python驱动默认不会自动提交事务,即使执行了SQL,也需要手动提交才能将变更持久化到数据库。
修改后的代码示例
# 假设已完成数据库连接(conn)和游标(cur)的初始化 cur.execute("SELECT concat('CP.',TableName) FROM DBC.TablesV WHERE TableKind = 'T' AND DatabaseName = 'CP' AND TableName LIKE 'ALB_%' AND LENGTH(tablename)=23;") for row in cur.fetchall(): if row[0]: # 简化非空判断逻辑 insert_sql = f"INSERT INTO CP.test1234 SELECT DISTINCT campaign_start FROM {row[0]};" cur.execute(insert_sql) # 执行生成的插入语句 # 提交事务,确保数据写入数据库 conn.commit() # 关闭游标和连接(按需执行) cur.close() conn.close()
内容的提问来源于stack exchange,提问作者Richard Grant
相关产品推荐
相关产品推荐

