【问题标题】:Adding name of the tables with use of logging使用日志记录添加表的名称
【发布时间】:2022-10-18 21:10:01
【问题描述】:

我想使用登录我的代码来运行我的代码并获取我无法执行操作的表的名称。我收到此错误消息:

数据不适用于表 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 是表名。

【问题讨论】:

  • 您使用哪个库连接到 SQL 数据库?
  • @Florent Monin 我使用的是 snowflake.connector。

标签: python logging


【解决方案1】:

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

请注意,在您的代码中 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()

【讨论】:

  • 只有一个问题。这应该是 cur.execute(query) 吗???在您的代码中,您正在执行 SQL ...
  • 是的,你是对的,对不起,将编辑
  • 我无法执行接口错误:252006
  • 尝试在循环结束时关闭连接,我已经编辑了我的答案
猜你喜欢
  • 2016-04-26
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
  • 2012-03-12
  • 2020-08-09
  • 2018-02-26
相关资源
最近更新 更多