如何在python中使用odbc驱动程序查询和排序列表?

2024-06-29 00:02:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个疑问:

def search(self, lists): //example input: lists = [1,2,3]
    if not self.connected:
        self.connect()
    for word in lists:
        query = self.cur.execute('SELECT InWords FROM Words WHERE Numeric IN (%s)' % (','.join('?'*len(lists))), lists).fetchall()
        result = " ".join([x[0] for x in query])
        return result

我正在使用odbc驱动程序连接sqlserver。在我的数据库中,我有3列,Numeric列例如1,2,3,4,5InWordsone,two,three,four,five现在我想根据输入的list的排列对输出进行排序,如下:[one,two,three]。我注意到,查询不会根据输入显示输出,而是每当查询从数据库中的list匹配中找到单词时,就会显示它。示例I不按特定顺序输入Numeric(3,5,1,2,4)中的数字,list变量包含[1,3,2],sql语句显示此输出:(three,one,two)而不是[one,three,two]。你知道吗


Tags: inself数据库fordefresultqueryone
1条回答
网友
1楼 · 发布于 2024-06-29 00:02:13

我不认为您可以创建这样的SQL查询来按所需的顺序返回数据。SQL在集合上工作,所以顺序是不可逆的。它可以由非常大的UNION强制执行,但我认为您可以创建同时返回NumericInWords的查询,将其存储在Python dict中,然后按此dict排序:

result = []
dct = {}
str_list = [str(s) for s in lists]
self.cur.execute('SELECT Numeric, InWords FROM Words WHERE Numeric IN (%s)' % (','.join(str_list)))
for row in self.cur.fetchall():
    dct[int(row[0])] = row[1]
for word in lists:
    try:
        result.append(dct[word])
    except KeyError:
        result.append(str(word))
return result

您还可以对每个数字进行SQL查询。我想到这样的代码:

result = []
for word in lists:
    v = word
    self.cur.execute('SELECT InWords FROM Words WHERE Numeric = %d' % (word))
    for txt in self.cur.fetchall():
        v = txt[0]
    result.append(v)
return result

PS我还没有测试过,这只是一个例子。你知道吗

相关问题 更多 >