我的代码需要一些基本的帮助,我想使用带有变量的sqlite3数据库中的数据self.channels_Index
。
我使用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。
看起来您正在使用channels_Index
变量来引用第i个通道,该通道按升序按字母顺序排序。在数据库中,没有保证的排序顺序,因此您必须首先确定第i个通道的名称。纯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())
现在,您可以通过将索引应用于第i个通道并将channel_list
结果传递给查询来引用第i个通道:
cur.execute('SELECT title, start_date, stop_date FROM programs WHERE channel=?;',
(channel_list[self.channels_Index],))
您无需选择,channel
因为您已经知道其价值。无论您的数据库中每个通道对应多少行,该方法都有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句