使用字典列表执行SQL炼金术

2024-03-28 22:11:39 发布

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

好吧

我一直在尝试不同的方法来实现这一点,但基本上我尝试使用python运行ETL作业,退出Teradata(TD),并在完成一些转换工作后将数据上传回TD。我使用Python 3.6sqlalchemy。在

代码如下:

list_dict = [{'id': '4234l23kjl', 'source': 'Google'},
    {'id': '4s5a6d42', 'source': 'Ad'},
    {'id': '35v469r89', 'source': 'Google'}]

然后,我使用sqlalchemy连接到一个表,并获取目标表的表信息:

^{2}$

然后,我尝试通过调用以下命令批量上载:

conn.execute(ins, list_dict)

我得到以下问题:

sqlalchemy.exc.DatabaseError: (teradata.api.DatabaseError) (2802, '[23000] 
    [Teradata][ODBC Teradata Driver][Teradata Database] Duplicate row error 
    in db.table. ') [SQL: 'INSERT INTO db.table (source) VALUES (?)'] 
    [parameters: ('Google',)]

但是,当我打印我正在创建的ins变量时,它给出了我想要的完整insert语句:

INSERT INTO db.table (id, source) VALUES (:id, :source)

它似乎正在尝试逐列插入,这不是我预期的行为,因此出现了重复行错误(两个google列为源代码)。有人知道这件事吗?在


Tags: 方法idsourcedbsqlalchemygoogletabledict