Найти - Пользователи
Полная версия: a='Иванов' print 'Фамилия %(a)s' Почему не работает?
Начало » Python для экспертов » a='Иванов' print 'Фамилия %(a)s' Почему не работает?
1 2 3
FoxPython
a='Иванов'
print ‘Фамилия: %(a)s’

По учебнику должно получиться:
Фамилия: Иванов

На деле же получается:
Фамилия: %(a)s

————————————————————
Почему не происходит подстановка значения переменной? Может учебник устарел? Или опечатка там? А как сделать-то? Очень нужно! Надо подставлять значения переменных в sql-запрос, типа так:
pole='fam'
querry='SELECT %(pole)s FROM mytable'
cu.execute(querry)


Получается только так:
pole='fam'
querry='SELECT %s FROM mytable' %pole
cu.execute(querry)
Меня этот вариант не устраивает! Когда много полей так делать неудобно (лично мне)
lukke
попался такой пример

print ‘%(language)s has %(#)03d quote types.’ % \
{'language': “Python”, “#”: 2}
Python has 002 quote types.




a='Иванов'
print ‘Фамилия: %(name)s’%{'name': a}


смотрел здесь: http://docs.python.org/lib/typesseq-strings.html
FoxPython
Ой-Ё! Да это же караул-записи!
А что никак чтоли нормально не сделать что-то подобное:
table='anketa'
pole1='fam'
pole2='im'
pole3='ot'
my_find='Иванов'
cu.execute(“SELECT %pole1, %pole2, %pole3 FROM %table_name WHERE %pole1=%my_find”)
Было бы просто и наглядно. Вместо писаний %s, а затем перечислений переменных после строки запроса, тем более, что для WHERE так значения не подсунешь.

А то я уж стал такие извращения делать:
querry=''SELECT ‘+pole1+’, ‘+pole2’+', ‘+pole3+ ’FROM ‘+table+’ WHERE ‘+pole1+’='+my_find“
cu.execute(querry)
т.е. ”сшивать" sql-запрос из строковых переменных. Тоже неплохой караул получается. :(
Александр Кошелев
FoxPython
Ой-Ё! Да это же караул-записи!
А что никак что-ли нормально не сделать что-то подобное:
это как раз и есть ненормально. чужой монастырь….
FoxPython
Было бы просто и наглядно.
было бы error prone
FoxPython
Вместо писаний %s, а затем перечислений переменных после строки запроса, тем более, что для WHERE так значения не подсунешь.
почему? у всех получается:)
FoxPython
А то я уж стал такие извращения делать:
а это действительно зря
lukke уже тебе предложил вариант со словарем.
я могу чуть-чуть дополнить:
def foobar():
    a = 1
    b = 2
    c = 3
    s = "%(a)s %(b)s %(c)s" % locals()
FoxPython
Daevaorn
то как раз и есть ненормально. чужой монастырь….
Мой монастырь - фокспро. Там работа с базой данных проще пареной репы.
Но, вот, приспичило мне питон изучать и я к вам припёрси… :)

Daevaorn
уже тебе предложил вариант со словарем.
И вариант со словарём считается удобным? Мамочки… Код выглядит как… код :) который раскодировать нужно. Шифровка, короче, непонятная.

Что-то я, видимо, недопонимаю чего %(n)s делает. Я думал это служит для того, чтобы подставить в строку строковое же значение переменной n…

def в моей прог-е совсем не к месту будет…

Daevaorn
почему? у всех получается:)
cu.execute(“SELECT %s ,%s FROM %s WHERE %s=%s”, (fam, im, table, fam, ‘Хрюкин’))
Ну, караул же! Да и, кажись, я наврал чего-то в этой строке…
Александр Кошелев
FoxPython
Мой монастырь - фокспро. Там работа с базой данных проще пареной репы.
ну так и проповедовал бы там. Чего тебе питон то сдался тогда? А уж если нужен питон, то соизволь принять его правила игры.
FoxPython
И вариант со словарём считается удобным? Мамочки… Код выглядит как… код smile который раскодировать нужно. Шифровка, короче, непонятная.
Шифровка это когда переменные из кода подставляются в строку автоматически. Не понятно откуда что берется и где эту переменную искать. А тут всё в одном месте, что гораздо удобней, практичней и безопасней.
FoxPython
Что-то я, видимо, недопонимаю чего %(n)s делает
видимо да
FoxPython
Ну, караул же! Да и, кажись, я наврал чего-то в этой строке…
конечно. Не бойся учиться и читать документацию. Она не кусается, а пользу приносит огромную.
FoxPython
Daevaorn
ну так и проповедовал бы там.
Чего проповедовал бы? Я за помощью пришёл. Прошу написать мне, ежели не в тягость примерчик sql-запроса в питоне, в который вместо прямого указания полей подставляются переменные питона содержащие имена полей. Причём как в SELECT так и в WHERE.

cu.execute(“SELECT fam, im, ot FROM mytable WHERE fam='Иванов'”)

Как правильно переписать этот запрос с использованием следующих переменных:
ffam='fam'
iim='im'
oot='ot'
find_value='Иванов'

Daevaorn
Не бойся учиться и читать документацию
Документации я накачал кучу. Читаю, пытаюсь спрограммировать, и, если не получается, иду на форум и прошу помощи. Я лично всегда готов помочь вопрошающему ежели знаю ответ на его вопрос, даже если это азбучные истины.
Ferroman
В питоне делают так:
dbc.execute("select * from %s limit %s, 1" %  (name, item))
или так:
cursor.execute("insert into Attendees values (?, ?, ?)", (name, seminar, paid) )
в документации все написано.
Использовать переменные с именами прямо в запросе нельзя, насколько я знаю.
Александр Кошелев
cu.execute("SELECT %(ffam)s, %(iim)s, %(oot)s FROM mytable WHERE %(ffam)s=%(find_value)s" % dict( 
    ffam='fam'
    iim='im'
    oot='ot'
    find_value='Иванов'
    ) )
FoxPython
Чего проповедовал бы? Я за помощью пришёл.
Со словами: “почему не работатет так как я хочу, ведь в языке N так работает и это круто”. Так о помощи не просят.
FoxPython
Я лично всегда готов помочь вопрошающему ежели знаю ответ на его вопрос, даже если это азбучные истины.
При этом вопрощающий должен быть “открыт” для получения ответа, а не придувать несуществующих языковых конструкций и ругаться из-за того, что они почему-то не работают.
FoxPython
За подсказку спасибо.
Daevaorn
Со словами: “почему не работатет так как я хочу, ведь в языке N так работает и это круто”. Так о помощи не просят.
А хотеть моё право, если фокспро не делает так как я хочу, то и ему я выражу своё фи, невзирая на собственные предпочтения. Для меня язык лишь средство разработки, а не… некий родственник которого нужно защищать от посягательств неверных :)
А “свой” вариант я написал здесь, чтобы мне пояснили как он должен выглядеть в питоне, чтобы быть работоспособным. Вот и всё.

А так получится? (в данный момент не могу сам проверить)

fields='fam', ‘im’, ‘ot’
cu.execute(“SELECT %s FROM %s”)%(fields, ‘mytable’)


П.С. “Караул” - это ругательство?


Ferroman
cursor.execute(“insert into Attendees values (?, ?, ?)”, (name, seminar, paid) )
А если я хочу и Аttendees указать не напрямую, а опять же через переменную указывающую на Attendes (содержащую строку с этим именем таблицы)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB