2012-02-26 4 views
1

Я использую Python 2.7 Я пишу некоторые запрос в питонаформат часть питона строки

q = ''' 
select * from users where user_name = %(user_name)s and user_email = %(user_email)s 
''' 

Я хочу форматировать строку в два этапа что-то вроде:

q2 = q % {'user_name':'david'} 
q3 = q2 % {'user_email':'[email protected]'} 

Пример, который я написал, не работает. python throws KeyError есть ли другой вариант для выполнения этих задач?

+6

Это не то, как вы делаете базы данных в Python. –

ответ

7

Используйте правильный API баз данных.

Тем не менее, если вы знаете, какие клавиши будут опущены в первом проходе, вы можете сделать:

>>> "%(a)s and %%(b)s" % {'a': 1} 
'1 and %(b)s' 
>>> _ % {'b': 2} 
'1 and 2' 
+0

Этот трюк классный. Я использую API баз данных для большинства переменных. я использую его с чувством, но спасибо за совет – user1087310

3

Спасибо за ваш ответ @katrielalex. Я пытаюсь сделать что-то подобное, используя метод .format() (python2.6 +). Ваш ответ побудил меня придумать следующее.

>>> s="{a} and {{b}}" 
'{a} and {{b}}' 
>>> s.format(a = 1) 
'1 and {b}' 
>>> _.format(b = 2) 
'1 and 2' 

Я надеюсь, что это поможет всем тем, кто хочет использовать новую функциональность.

Смежные вопросы