Python TypeError:必须是字符串或只读字符缓冲区,而不是列表

Python TypeError:必须是字符串或只读字符缓冲区,而不是列表,python,database,pyodbc,Python,Database,Pyodbc,我正在尝试连接到数据库并获取数据 但是当我试图写入一个文件时,它给出了以下错误 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_NAM

我正在尝试连接到数据库并获取数据

但是当我试图写入一个文件时,它给出了以下错误

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
请对此进行指导

谢谢。

fetchall()
返回一个行列表,您应该做的是从该列表中获取真正的带有字符串类型的“book\u 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

来源:

不清楚哪一行产生了错误,但我认为是
file\u write.write(book\u id)
需要一个字符串,但您给它一个数据库行列表。而是在
book\u id
的所有行中循环。请尝试
键入(book\u id)
。看到它打印了什么吗?@Rohit检查解决方案。
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))