SQL Alchemy执行字典列表

时间:2018-03-21 19:26:49

标签: python sqlalchemy teradata

好,

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

代码如下:

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

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

engine = create_engine(the usual stuff here)

meta = MetaData()

conn = engine.connect()

t = Table('table', meta, autoload=True, 
      autoload_with=engine)

ins = t.insert()

然后我尝试通过调用批量上传:

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 INTO db.table (id, source) VALUES (:id, :source)

似乎它试图逐列插入,这不是我期望的行为,因此重复的行错误(两个谷歌列为源)。有人对此有任何了解吗?

0 个答案:

没有答案