如果ID不在DWH表中,则使用其他表中的值填充表

2024-06-28 16:14:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

enter image description here

DataFrame只有来自操作数据库中每个联接表的ID列。我已经为这些列中的每一列创建了一个变量,例如“billing_profiles_id”,如下所示:

billing_profiles_dim_id = df['billing_profiles_dim_id'] 

我正在尝试逐行迭代,以查看此处的ID是否位于数据仓库的“billing\u profiles\u 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

此错误消息指向位于的barcket关闭

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

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


Tags: keyid数据库dfsqlprofileprofilescursor
1条回答
网友
1楼 · 发布于 2024-06-28 16:14:46

您缺少一个双勾号和一个+

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))

相关问题 更多 >