【问题标题】:Populating Table with Values from other table if ID not in DWH table如果 ID 不在 DWH 表中,则使用其他表中的值填充表
【发布时间】:2020-02-10 16:46:20
【问题描述】:

我正在执行一项 ETL 任务,其中我正在查询数据仓库中的表,以查看它是否包含通过连接操作数据库中的表创建的 DataFrame (df) 中的 ID。

DataFrame 仅包含来自操作数据库中每个连接表的 ID 列。我为这些列中的每一列创建了一个变量,例如'billing_profiles_id' 如下:

billing_profiles_dim_id = df['billing_profiles_dim_id'] 

我正在尝试逐行迭代以查看此处的 ID 是否在数据仓库的“billing_profiles_dim”表中。如果 ID 不存在,我想使用 ODB 中匹配的 ID 行逐行填充 DWH 表:

for key in billing_profiles_dim_id:
    sql = "SELECT * FROM billing_profiles_dim WHERE id = '"+str(key)+"'"
    dwh_cursor.execute(sql)
    result = dwh_cursor.fetchone()
if result == None:
    sqlQuery = "SELECT * from billing_profile where id = '"+str(key)+"'"
    sqlInsert = "INSERT INTO billing_profile_dim VALUES ('"+str(key)+"','"+billing_profile.name"')
    op_cursor = op_connector.execute(sqlInsert)
    billing_profile = op_cursor.fetchone()

至少到目前为止,我收到以下错误:

SyntaxError: EOL while scanning string literal

此错误消息指向括号结束处

sqlInsert = "INSERT INTO billing_profile_dim VALUES ('"+str(key)+"','"+billing_profile.name"')

我目前无法解决。我也知道这段代码可能会遇到另一个或两个问题。有人可以看看我如何解决当前的问题,并请确保我走的是正确的道路吗?

【问题讨论】:

    标签: python mysql database etl star-schema


    【解决方案1】:

    您缺少一个双勾和一个 +

    sqlInsert = "INSERT INTO billing_profile_dim VALUES ('"+str(key)+"','"+billing_profile.name+"')"
    

    但是你真的应该切换到准备好的语句,比如

    sql = "SELECT * FROM billing_profiles_dim WHERE id = '%s'"
    dwh_cursor.execute(sql,(str(key),))
    ...
    sqlInsert = ('INSERT INTO billing_profile_dim VALUES  '
           '(%s, %s )')
    dwh_cursor.execute(sqlInsert , (str(key), billing_profile.name))
    

    【讨论】:

      猜你喜欢
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 2021-12-25
      相关资源
      最近更新 更多