programing

어떻게 하면 cx-oracle이 쿼리 결과를 튜플이 아닌 사전에 바인딩할 수 있습니까?

powerit 2023. 7. 22. 10:30
반응형

어떻게 하면 cx-oracle이 쿼리 결과를 튜플이 아닌 사전에 바인딩할 수 있습니까?

여기 제 코드가 있습니다.쿼리 결과를 튜플 목록이 아닌 사전 목록으로 반환하는 방법을 찾고 싶습니다.cx_oracle은 설명서의 일부에서 '바인딩'에 대해 언급하면서 이를 지원하는 것 같습니다.어떻게 작동하는지는 알 수 없지만요.

def connect():  
    dsn = cx_Oracle.makedsn("host", 1521, "sid")
    orcl = cx_Oracle.connect('scott/tiger@' + dsn)
    curs = orcl.cursor()
    sql = "select * from sometable"
    curs.execute(sql)
    result = curs.fetchall()
    for row in result:
        print row[13] #CATEGORY field order
        print row['CATEGORY'] # <- I want this to work ('CATEGORY' is the name of a field in the 'sometable' table)
    curs.close()

바인드바는 다음과 같은 쿼리를 실행하는 데 사용됩니다.

  • 이름별(지정된 매개 변수 지정)

    cursor = self.db.cursor()
    cursor.execute("SELECT bookName, author from books where Id=:bookId" , bookId="155881")
    print cursor.bindnames()
    

인쇄 예정: ['BOOKID']

  • 가치 목록이 주어진 위치에 따라.

    cursor = self.db.cursor()
    cursor.prepare("insert into books (bookId,title,author,price) values(:1, :2, :3, :4)")
    cursor.executemany(None, listOfbookwhichAreTuppleOf4Field )
    

기대했던 것을 얻기 위해 다음과 같은 방법을 시도할 수 있습니다.

def connect():  
    dsn = cx_Oracle.makedsn("host", 1521, "sid")
    orcl = cx_Oracle.connect('scott/tiger@' + dsn)
    curs = orcl.cursor()
    sql = "select * from sometable"
    curs.execute(sql)
    desc = [d[0] for d in curs.description]
    result = [dict(zip(desc,line)) for line in curs]
    curs.close()

여기 빠르고 더러운 것이 있습니다.더 나은 방법으로 게시하십시오.

def connect():  
    dsn = cx_Oracle.makedsn("host", 1521, "sid")
    orcl = cx_Oracle.connect('scott/tiger@' + dsn)
    curs = orcl.cursor()
    sql = "select * from sometable"
    curs.execute(sql)
    fieldNumber = 0
    fieldNames={}
    for desc in curs.description:
        fieldNames[desc[0]]=fieldNumber
        fieldNumber+=1
    result = curs.fetchall()
    for row in result:
        print str(row[fieldNames['CATEGORY']])
    curs.close()

언급URL : https://stackoverflow.com/questions/4468071/how-can-i-make-cx-oracle-bind-the-results-of-a-query-to-a-dictionary-rather-than

반응형