0

例如我有我的字典:my_dict = {'2':'even','1':'odd','3':'odd'} 这是我的数据库:

+---------+--------+ | Numeric | String | +---------+--------+ | 5 | five | | 4 | four | | 3 | three | | 2 | two | | 1 | one | +---------+--------+

my_dict字典中,使用它们keys,我想String在我的数据库(SQL SERVER)中获取它们的值,并使用它们values,按以下顺序对它们的String值进行排序:

odd - even - odd被喜欢这个

one two three.

并像这样打印输出:Let's count one two three. 实际上,我只是基于 Jisoo 的问题Querying a list of tuples in Database因为我们非常相似,但在我的,是关于字典的。

4

1 回答 1

0

这个问题有两个方面:第一个是 SQL 查询部分。那是更简单的一个:

假设数据库表类似于

 CREATE TABLE number (value INTEGER, name STRING);

SQL 或多或少简单明了

 from contextlib import closing

 [...]

 my_dict = {'2':'even','1':'odd','3':'odd'}

 # database connection dbc, see python dbapi
 with closing(dbc.cursor()) as cur:
     cur.execute('SELECT value, name FROM number WHERE value IN (1, 2, 3)')
     for value, name in cur:              
         print "%s is %s" % (name, my_dict[str(value)])

这里的 python 问题是将字典键放入 SQLIN子句中,因为这不能通过 DBAPI2 参数扩展直接实现(参见此处)。

因此:

 my_dict = {'2':'even','1':'odd','3':'odd'}

 # database connection dbc, see python dbapi
 with closing(dbc.cursor()) as cur:
     stmt = 'SELECT value, name FROM number WHERE id IN (%s)' % ','.join('?' for i in my_dict))
     cur.execute(stmt, my_dict.keys())
     for value, name in cur:              
         print "%s is %s" % (name, my_dict[str(value)])

还有一个'?'是依赖于所涉及数据库的参数样式。

于 2015-03-06T09:02:13.087 回答