2015-03-06 3 views
0

Par exemple, j'ai mon dictionnaire: my_dict = {'2':'even','1':'odd','3':'odd'} Et voici ma base de données:Comment faire une requête dans la base de données en utilisant la valeur du dictionnaire en python?

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

Dans my_dict dictionnaire, en utilisant leur keys, je veux obtenir leur valeur String dans ma base de données (SQL Server) et en utilisant leur values, trier leur valeur String dans cette séquence:

odd - even - odd à ajouté ce

one two three.

Et d'imprimer la sortie comme ceci: Let's count one two three. En fait, je viens de base de la question de Jisoo Querying a list of tuples in Database parce que nous sommes assez similaires mais dans le mien, est sur le dictionnaire.

+0

Pouvez-vous élaborer sur l'ordre de tri prévu? Parce que '('pair', 'impair', 'impair')' n'a pas d'ordre total, c'est-à-dire que l'ordre serait ambigu de la façon dont je l'ai lu. – dhke

+0

Oh oui, désolé je ne l'ai pas réalisé de cette façon. Il suffit de ne pas tenir compte de la séquence et de trier en utilisant leurs valeurs, afficher les valeurs 'String' des' keys' comme ceci 'two est divisible par 2, on n'est pas divisible par 2, trois n'est pas divisible par 2'. –

Répondre

0

Il y a deux côtés à cette question: Le premier est la partie de requête SQL. C'est la plus simple:

En supposant que la table de base de données est quelque chose comme

CREATE TABLE number (value INTEGER, name STRING); 

SQL est plus ou moins simple

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)]) 

Le problème python est ici pour obtenir les clés de dictionnaire dans la La clause SQL IN n'est pas directement possible avec l'extension de paramètre DBAPI2 (voir here).

Par conséquent:

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)]) 

Un aussi que le '?' dépend de la paramstyle de la base de données concernée.

+0

J'utilise la connexion 'pypyodbc' d'odbc monsieur. Cela peut-il être possible? –

+0

Désolé, je ne peux pas vous aider. Marquer 'pypyodbc' dans votre question pourrait aider, cependant. – dhke

+0

Merci Monsieur d'avoir répondu. Je pense que je devrais essayer le dbc pour voir comment cela fonctionne. –