由于我是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 |
+-----+------+-----+
如何根据numeric
或string
odd
是否在数据库中来查询even
的{{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注入,数据库可以更好地缓存此类语句的查询计划。