2014-11-27 2 views
2

DB에 연결하여 데이터를 가져 오려고합니다.TypeError : 목록이 아닌 문자열 또는 읽기 전용 문자 버퍼 여야합니다.

그러나 파일에 쓸 때 아래 오류가 발생합니다.

TypeError: must be string or read-only character buffer, not list 

다음은 나의 샘플 코드입니다.

import pyodbc 
path= "M:/xyz/" 
file_write=open(path +"files.test.log", "w") 
#print "Connection started" 
db=pyodbc.connect('DSN=DB_NAME;PWD=xyz') 
#print "Connection done" 
cursor = db.cursor() 
book_value="WPZ.N" 
query="SELECT book_id FROM Table_name WHERE book_value='"+book_value+"'" 
#print query 
cursor.execute(query) 
book_id= cursor.fetchall() 
file_write.write(book_id) 
#str(file_write) 
#print file_write 

이 안내서를 참조하십시오.

감사합니다.

+0

이 라인이 오류가 발생하는 불분명,하지만 난 문자열을 기대 (book_id)'는'file_write.write 생각하지만, 데이터베이스 행 목록을 제공하십시오. 대신'book_id'의 모든 행을 반복하십시오. – Rusty

+0

'type (book_id)'시도. 인쇄 내용을 확인하십시오. –

답변

3

fetchall()은 행 목록을 반환합니다.이 목록에서 실제 'book_id'문자열 유형을 가져 와서 파일에 기록해야합니다.

이 시도 :

rows = cursor.fetchall() 
for row in rows: 
    file_write.write(row.book_id) # not sure if row[0] works as well 
    file_write.write('\n') # new line or anything else you like 

소스 : pyodbc example

1
book_id= cursor.fetchall() #List of rows 

file_write.write(book_id) # you will get error `TypeError: expected a character buffer object` 

file_write.write(', '.join(book_id)) 
+0

@Rohit 해결책을 확인하십시오. –

관련 문제