好,
我一直在尝试不同的方法来做到这一点,但基本上我正在尝试使用python运行ETL作业,退出Teradata(TD),并在进行一些转换工作后将数据上传回TD 。我将Python 3.6
与sqlalchemy
一起使用。
代码如下:
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)
似乎它试图逐列插入,这不是我期望的行为,因此重复的行错误(两个谷歌列为源)。有人对此有任何了解吗?