使用日志记录添加表的名称



我想在代码中使用日志记录来运行代码,并获取无法执行操作的表的名称。我收到这个错误消息:

数据不可用于表DIM_LOGS。请求的已超过对象创建时间。

我的例子:

import pandas as pd
import logging 
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
sql = "SELECT * FROM TABLE"
cur.execute(sql)
df = pd.DataFrame.from_records(iter(cur), columns=[x[0] for x in cur.description])
my_dict = dict()
for i in df['col1'].unique().tolist():
df_x = df[df['col1'] == i]
my_dict[i] = df_x['col_table'].tolist()
sql_list = []
for k, v in my_dict.items():
for v in v:
sql_list.append([f"INSERT INTO {k}.{v} SELECT * FROM {k}.{v} where col2 = 1;"])
sql = 'EXECUTE IMMEDIATE %s'
cur.executemany(sql, sql_list)
conn.close()

我想添加异常以便运行此代码,并将表的名称添加到一些日志文件或我有错误的东西中。在我的for循环中,k是模式名称,v是表名称。

您可以在循环中将executemany替换为execute。然后,您将确切地知道哪个表失败了,并且可以相应地处理此问题。

请注意,在您的代码中,for v in v:是一个糟糕的想法,因为该值将覆盖列表v

sql = "SELECT * FROM TABLE"
cur.execute(sql)
df = pd.DataFrame.from_records(iter(cur), columns=[x[0] for x in cur.description])
my_dict = dict()
for i in df['col1'].unique().tolist():
df_x = df[df['col1'] == i]
my_dict[i] = df_x['col_table'].tolist()
for schema, tables in my_dict.items():
for table in tables:
query = f"INSERT INTO {schema}.{table} SELECT * FROM {schema}.{table} where col2 = 1;"
try:
cur.execute(query)
except snowflake.connector.errors.ProgrammingError as e:
# Something went wrong with the insert
logging.error(f"Inserting in {schema}.{table}: {e}")
conn.close()

最新更新