SQLite中SELECT语句仅返回单列?如何修复以返回指定三列
问题原因与解决方案
你的问题出在**conn.row_factory = lambda cursor, row: row[0]**这一行——这个设置强制让每一行结果只返回第一个字段(也就是Artists.artist),自然就丢掉了后面的歌曲名和播放量数据。
要获取包含三列数据的嵌套列表,只需要调整这行row_factory的设置,或者直接移除它就行。
修改后的代码方案一(推荐)
直接移除row_factory的赋值,使用SQLite默认的行处理逻辑:
import sqlite3 conn = sqlite3.connect('utube.db') # 删掉这行强制取第一个元素的设置 c = conn.cursor() c.execute("""Select Artists.artist, Songs.Song ,Songs.views FROM Songs INNER JOIN Artists ON Artists.Artist_Id = Songs.Artist_Id """) allsong = c.fetchall() print(allsong) conn.commit() conn.close()
修改后的代码方案二(保留row_factory但调整逻辑)
如果你有特殊需求需要保留row_factory,可以把它改成返回整行:
import sqlite3 conn = sqlite3.connect('utube.db') # 改成返回完整的行数据,而不是只取第一个元素 conn.row_factory = lambda cursor, row: row c = conn.cursor() c.execute("""Select Artists.artist, Songs.Song ,Songs.views FROM Songs INNER JOIN Artists ON Artists.Artist_Id = Songs.Artist_Id """) allsong = c.fetchall() print(allsong) conn.commit() conn.close()
这样运行后,你就能得到类似[['Blackpink','具体歌曲名',播放量],['Blackpink','另一首歌',播放量],...]的嵌套列表结果了。
内容的提问来源于stack exchange,提问作者Wallika
相关产品推荐
相关产品推荐

