pandas - Teradata 插入错误:ValueError:DataFrame 的真值不明确
问题描述
我正在尝试将 pandas 数据框插入 Teradata 并遇到此错误。与 Teradata 的连接正在工作,因为我能够一次插入一条记录相同的数据。请帮忙。
import pandas as pd
import teradata as td
Car_Sales = pd.DataFrame([
{"Sale_Dt":"2019-10-01", "Brand":"Mercedes","Sale_Type":"New","Dealer_Type":"Urban","SalesVol":"5"},
{"Sale_Dt":"2019-10-02", "Brand":"BMW","Sale_Type":"Used","Dealer_Type":"Sub-Urban","SalesVol":"3"},
])
udaExec = td.UdaExec()
with udaExec.connect(method="odbc",DSN = "dsn1",driver = 'Teradata Database ODBC Driver 16.20') as session:
#session.execute("INSERT INTO db.tbl_Cars (Sale_Dt,Brand,Sale_Type,Dealer_Type,SalesVol) VALUES (?,?,?,?,?)",("2019-10-01","Mercedes","New","Urban",5))
query2 = "INSERT INTO db.tbl_Cars"
session.execute(query2,Car_Sales,batch=True)
错误:ValueError:DataFrame 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
解决方案
这可能是因为您直接将 DataFrame 传递给execute
. 此外,对于批量插入,文档说您必须使用executemany
. 一个小例子——
session.executemany("""INSERT INTO employee (id, firstName, lastName, dob)
VALUES (?, ?, ?, ?)""",
((1,"James", "Kirk", "2233-03-22"),
(2,"Jean-Luc", "Picard", "2305-07-13")),
batch=True)
所以,在你的情况下,它会是
with udaExec.connect(method="odbc",DSN = "dsn1",driver = 'Teradata Database ODBC Driver 16.20') as session:
#session.execute("INSERT INTO db.tbl_Cars (Sale_Dt,Brand,Sale_Type,Dealer_Type,SalesVol) VALUES (?,?,?,?,?)",("2019-10-01","Mercedes","New","Urban",5))
#No. of ? must be equal to number of fields in each tuple
query2 = "INSERT INTO db.tbl_Cars VALUES (?, ?, ...)"
data = tuple(tuple(x) for x in Car_Sales.values)
session.executemany(query2, data, batch=True)
有关更多信息,请查看teradata的文档
推荐阅读
- dart - 使用符号传递班级成员的姓名?
- mongodb - 如何在 mongo/wiredtiger mongo 4.4 版中获取碎片统计信息
- php - PHP文件处理读写
- python-3.x - 使用 sklearn 中的 linear_model 感知器模块来分离点
- google-apps-script - 为什么 Google Apps 脚本中的 getBlob() 没有获取最新版本的文档?
- c - 在 Windows 上,我是否必须在调用 CreateProcess() 后调用 WaitForSingleObject()?
- jenkins - Jenkins 无法使用共享库验证多分支管道的 Bitbucket 存储库
- python - Flask Socket-IO 服务器客户端不通信(使用 tweepy 和 twilio)
- java - 在 JMeter 中创建 Hashtable 表生成语法错误
- ruby-on-rails - 收费时不创建条纹发票