从lis运行sql查询时出现python问题

2024-10-02 12:32:45 发布

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

我正在尝试将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()    

Tags: inpyexecutesessionlocallinequeryusers
2条回答
import Teradata
import xlrd

udaExec = teradata.UdaExec (appName="HelloWorld", version="1.0",
        logConsole=False)

session = udaExec.connect(method="odbc", system="tdprod",
        username="abc", password="xyz!1",authentication="LDAP",
                          driver="Teradata");



loc = ("C:\\Users\\xyz\\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:

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))

……你的情况不是这样的。有趣的是,Pythonstr对象是iterable。换句话说,从源对象(Excel表)获取的查询不是正确的字符串。你知道吗

可能的原因:

  1. 可能是rowlist,列表中的每一项都是行中的一个单元格吗?如果是这样,试试row[0],或者str(row[0]),如果前者不起作用。你知道吗
  2. 是否需要将类型转换为字符串?如果是这样,请尝试str(row)(这不太可能奏效,但您可以随时尝试)
  3. 可能是其他类型的吗?请尝试print(type(row));这将为您的stdout提供正在处理的对象的类型,这可能有助于您更好地理解这里的问题。你知道吗

祝你好运,请在这里发回你的结果,这样这个问题就有希望帮助其他遇到类似问题的人。你知道吗

相关问题 更多 >

    热门问题