查询数据库中的元组列表

时间:2015-03-05 10:40:40

标签: python sql-server list tuples

由于我是python编程的新手,因此我不太了解从数据库查询数据。 首先,我在SQL Server中创建了我的数据库,有两列:String列和Numeric列。

+--------+---------+ | String | Numeric | +--------+---------+ | One | 1 | | Five | 5 | | Three | 3 | | Seven | 7 | | Eight | 8 | | Two | 2 | +--------+---------+

例如:

X = [(‘three’,’odd’), (‘one’,’odd’), (‘two’,’even’)]

现在我希望输出遵循以下顺序:odd – even – odd所以它就像这个1 2 3 +-----+------+-----+ | Odd | Even | Odd | +-----+------+-----+ | 1 | 2 | 3 | +-----+------+-----+

如何根据numericstring odd是否在数据库中来查询even的{​​{1}}值?

1 个答案:

答案 0 :(得分:0)

您的查询对我来说不明确。混合使用SQL数据结构和Python数据结构,目前尚不清楚是从Python还是从SQL调用它。您的查询应包含您尝试执行的一些代码。

使用SQL表中的这些简单数据,您可以将Python表视为Python词典。 NUMSTR dict代表你第一个SQL表,我将X元组列表更改为dict:

NUMSTR = {1: 'one', 2: 'two', 3: 'three'}
X = {'three': 'odd', 'one': 'odd', 'two': 'even'}

def show_even_odd(in_numbers):
    numbers_info = []
    for i in in_numbers:
        try:
            num_name = NUMSTR[i]
            eo = X[num_name]
        except KeyError:
            eo = '???'
        numbers_info.append(eo)
    print(' | '.join(['%4s' % x for x in numbers_info]))
    print(' | '.join(['%4s' % x for x in in_numbers]))


def test():
    show_even_odd([1, 2, 3])

我将数据存储在numbers_info中以将其显示在一行中。在单独的行中显示有关每个数字的信息会更容易。

修改

如果您的问题是获取每个元组的第一个值并显示其数值,那么这样的代码如下所示:

X = [('three','odd'), ('one','odd'), ('two','even')]
for nn, eo in X:
    print('%s - %s' % (get_number(nn), eo))

现在您必须定义get_number()功能。使用全局cursor,这可能有效:

def get_number(number_name):
    result = number_name
    cursor.execute('SELECT numeric FROM my_table WHERE String = ?', number_name)
    for txt in cursor.fetchall():
        result = txt[0]
    return result

PS在这段代码中,我使用?中的SELECT来编写预备语句。它应该被ODBC驱动程序替换为number_name。这样的操作可以由Python完成:"SELECT ... WHERE String = '%s'" % (number_name),但准备好的语句要好得多。它们可以防止SQL注入,数据库可以更好地缓存此类语句的查询计划。