我正在尝试将Excel中的查询读入Python列表,这是我能够实现的。 下一步,我要在Teradata中执行列表中的所有查询(可以是任何数据库) 我得到一个错误,下面是示例代码。感谢您的帮助。你知道吗
#工作代码:#
导入teradata
导入xlrd
udaExec=teradata.UdaExec文件(appName=“Hello World”,ersion=“1.0”,logConsole=False)
session = udaExec.connect(method="odbc", system="tddev",
username="abc", password="abc!1",authentication="LDAP",driver="Teradata");
loc = ("C:\\Users\\abc\\Desktop\\Queries.xlsx")
wb = xlrd.open_workbook(loc)
wbsheet=wb.sheet_by_name("Queries")
total_rows=wbsheet.nrows
query_list=[]
for row1 in range(1,total_rows):
exceldata = wbsheet.row(row1)
query_list.append(exceldata)
# getting an error after adding session execute code to above code #
for row2 in query_list:
session.execute(row2)
Error:
Traceback (most recent call last):
File "C:/Users/prasnaya/Desktop/Terada_worksheet.py", line 31, in <module>
session.execute(row2)
File "C:\Users\prasnaya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\teradata\udaexec.py", line 675, in execute
self.internalCursor.execute(query, params, **kwargs)
File "C:\Users\prasnaya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\teradata\udaexec.py", line 748, in execute
self._execute(self.cursor.execute, q, params, **kwargs)
File "C:\Users\prasnaya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\teradata\udaexec.py", line 790, in _execute
func(query, params, **kwargs)
File "C:\Users\prasnaya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\teradata\tdodbc.py", line 613, in execute
self.hStmt, _inputStr(_convertLineFeeds(query)), SQL_NTS)
File "C:\Users\prasnaya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\teradata\tdodbc.py", line 881, in _convertLineFeeds
return "\r".join(util.linesplit(query))
File "C:\Users\prasnaya\AppData\Local\Programs\Python\Python37-32\lib\site-packages\teradata\util.py", line 357, in linesplit
sql if isString(sql) else newline.join(sql))
TypeError: can only join an iterable
Final Working Code :
import Teradata
import xlrd
udaExec = teradata.UdaExec (appName="HelloWorld", version="1.0",
logConsole=False)
session = udaExec.connect(method="odbc", system="tdprod",
username="xyz", password="abc!1",authentication="LDAP",
driver="Teradata");
loc = ("C:\\Users\\prasnaya\\Desktop\\Queries.xlsx")
wb = xlrd.open_workbook(loc)
wbsheet=wb.sheet_by_name("Queries")
total_rows=wbsheet.nrows
print(total_rows)
query_list=[]
for row1 in range(0,total_rows):
exceldata = wbsheet.cell_value(row1,0)
query_list.append(exceldata)
print(len(query_list))
for row2 in query_list:
print(row2)
for row in session.execute(row2):
print(row)
session.close()
因此,问题是这里的linesplit方法(teradata内部)假定
sql
参数是iterable:……你的情况不是这样的。有趣的是,Python
str
对象是iterable。换句话说,从源对象(Excel表)获取的查询不是正确的字符串。你知道吗可能的原因:
row
是list
,列表中的每一项都是行中的一个单元格吗?如果是这样,试试row[0]
,或者str(row[0])
,如果前者不起作用。你知道吗str(row)
(这不太可能奏效,但您可以随时尝试)print(type(row))
;这将为您的stdout
提供正在处理的对象的类型,这可能有助于您更好地理解这里的问题。你知道吗祝你好运,请在这里发回你的结果,这样这个问题就有希望帮助其他遇到类似问题的人。你知道吗
相关问题 更多 >
编程相关推荐