【问题标题】:TypeError: must be string or read-only character buffer, not listTypeError:必须是字符串或只读字符缓冲区,而不是列表
【发布时间】:2014-11-27 12:48:10
【问题描述】:

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

但是当我尝试写入文件时,它给了我以下错误。

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

请指导。

谢谢。

【问题讨论】:

  • 不清楚哪一行会产生错误,但我认为file_write.write(book_id) 需要一个字符串,但你给它一个数据库行列表。而是循环遍历book_id 的所有行。
  • 试试type(book_id)。看看它打印了什么?

标签: python database pyodbc


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    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))
    

    【讨论】:

    • @Rohit 检查解决方案。
    猜你喜欢
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多