我需要一些基本的代码帮助,我想使用变量self.channels_Index
从sqlite3数据库中获取数据。
当我按下键盘的向下箭头按钮时,每次加起来时,我都使用self.channels_Index
来定义它。
所以当我尝试这个时:
programs = list()
#get the programs list
profilePath = xbmc.translatePath(os.path.join('special://userdata/addon_data/script.tvguide', 'source.db'))
con = database.connect(profilePath)
cur = con.cursor()
cur.execute('SELECT channel, title, start_date, stop_date FROM programs WHERE channel=?', [self.channels_Index])
programs = cur.fetchall()
start_pos = 375 # indent for first program
print program
for ind, row in enumerate(programs):
program = row[1].encode('ascii'), str(row[2]), str(row[3])
我会得到这样的结果:
17:58:26 T:4976 NOTICE: []
我的数据库:
ABC Family
ABC Family
ABC Family
ABC Family
ABC Family
..etc until to 69 rows
CBS
CBS
CBS
CBS
CBS
..etc until to 69 rows
ESPN
ESPN
ESPN
ESPN
ESPN
..etc until to 69 rows
FOX NEWS
FOX NEWS
FOX NEWS
FOX NEWS
FOX NEWS
FOX NEWS
..etc until to 69 rows
我想要实现的是在self.channels_Index
显示为7时查找数据库中的行,或者我希望将其乘以69倍然后我想要获取69行数据打印数据列表。
示例:当self.channels_Index
显示为4时,我想在数据库中找到FOX NEWS
行以获取69次全部数据,然后打印FOX NEWS
数据列表
与self.channels_Index
一起使用时,能否帮助我如何做到这一点?
编辑:当我尝试这个时:
cur = con.cursor()
cur.execute('SELECT DISTINCT channel FROM programs;')
channel_list = sorted(row[0] for row in cur.fetchall())
cur.execute('SELECT title, start_date, stop_date FROM programs WHERE channel=?;', channel_list[self.channels_Index])
programs = cur.fetchall()
它给我错误:ProgrammingError:提供的绑定数量不正确。当前语句使用1,并且提供了10个。
答案 0 :(得分:0)
看起来您正在使用channels_Index
变量来引用i th 频道,按字母顺序按升序排序。在数据库中,没有保证排序顺序,因此您必须首先找出i th 通道的名称。纯SQL方法是使用显式排序数据的查询;例如,此查询将按字母顺序为您提供第三个频道:
SELECT DISTINCT channel FROM programs ORDER BY channel ASC LIMIT 1 OFFSET 2;
但是您希望能够浏览不同的频道,OFFSET
值不是您可以在查询中参数化的值。一个更好的解决方案可能是首先获取所有通道名称,然后在Python中对它们进行排序:
cur.execute('SELECT DISTINCT channel FROM programs;')
channel_list = sorted(row[0] for row in cur.fetchall())
现在,您可以通过将索引应用于channel_list
并将结果传递给您的查询来引用i th 频道:
cur.execute('SELECT title, start_date, stop_date FROM programs WHERE channel=?;',
(channel_list[self.channels_Index],))
您不需要选择channel
,因为您已经知道它的价值。无论数据库中对应于每个通道的行数是多少,此方法都有效。