Fetchall()在sqlite db上返回unicode字符串[Python 2.7]

时间:2014-03-18 01:11:35

标签: python sqlite python-2.7 unicode

我遇到了一些运行fetchall()的问题。

我有一个像这样定义的表:

with bookDB:
    bookCur = bookDB.cursor()
    bookCur.execute("CREATE TABLE Books(bookID INTEGER PRIMARY KEY, Title TEXT, Author TEXT, Genre TEXT)")
    bookCur.close()

现在,如果我想按类型搜索数据库中的书籍,我有以下代码:

with bookDB:
        bookCur = bookDB.cursor()
        bookCur.execute("SELECT * FROM Books WHERE Genre=?",(query,)) 
        booklist=bookCur.fetchall()
        book = ''.join(str(i) for i in booklist)
        bookCur.close()
        return book;

我想加入图书清单中的所有项目以制作一个分配给预订的字符串但是当我这样做时,所有的TEXT字段都是unicode格式(u' TEXTHERE')和前端和后端括号也留下来。我知道我可以多次使用拆分或转发器,但必须有一些我做错了。我如何阻止这种情况发生?有什么提示吗?

这是我从胎儿那里得到的:

[(133, u'Jurassic Park', u'Crichton', u'Sci-Fi')]

我想要一个像这样的字符串

133>>Jurassic Park>>Crichton>>Sci-Fi

通过套接字发回。

非常感谢您提前寻求帮助。

1 个答案:

答案 0 :(得分:1)

booklist是表示数据库中查询列的tuple列表。通过执行book = ''.join(str(i) for i in booklist),您只需连接tuplesbooklist的字符串表示形式。

尝试这样的事情:

book = '|'.join(['>>'.join(map(str, row)) for row in booklist])

这将返回如下内容:

"133>>Jurassic Park>>Crichton>>Sci-Fi|134>>Star Wars>>Crichton>>Sci-Fi" 

其中>>是列分隔符,|是行分隔符。如果您需要分隔符的其他表示,只需更改字符串文字。

在该代码中,内部join将连接tuples(列),外部将连接rowsmap(str, row)是将元组转换为string对象列表的技巧,它将str方法应用于元组中的每个元素。这是必需的,因为在包含非字符串元素的iterable上简单地执行join会返回TypeError异常。

希望这有帮助!