Форум сайта python.su
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)
Меня этот вариант не устраивает! Когда много полей так делать неудобно (лично мне)
Офлайн
попался такой пример
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
Отредактировано (Дек. 8, 2007 19:27:50)
Офлайн
Ой-Ё! Да это же караул-записи!
А что никак чтоли нормально не сделать что-то подобное:
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а это действительно зря
А то я уж стал такие извращения делать:
def foobar(): a = 1 b = 2 c = 3 s = "%(a)s %(b)s %(c)s" % locals()
Отредактировано (Дек. 8, 2007 20:28:42)
Офлайн
DaevaornМой монастырь - фокспро. Там работа с базой данных проще пареной репы.
то как раз и есть ненормально. чужой монастырь….
DaevaornИ вариант со словарём считается удобным? Мамочки… Код выглядит как… код :) который раскодировать нужно. Шифровка, короче, непонятная.
уже тебе предложил вариант со словарем.
Daevaorncu.execute(“SELECT %s ,%s FROM %s WHERE %s=%s”, (fam, im, table, fam, ‘Хрюкин’))
почему? у всех получается:)
Офлайн
FoxPythonну так и проповедовал бы там. Чего тебе питон то сдался тогда? А уж если нужен питон, то соизволь принять его правила игры.
Мой монастырь - фокспро. Там работа с базой данных проще пареной репы.
FoxPythonШифровка это когда переменные из кода подставляются в строку автоматически. Не понятно откуда что берется и где эту переменную искать. А тут всё в одном месте, что гораздо удобней, практичней и безопасней.
И вариант со словарём считается удобным? Мамочки… Код выглядит как… код smile который раскодировать нужно. Шифровка, короче, непонятная.
FoxPythonвидимо да
Что-то я, видимо, недопонимаю чего %(n)s делает
FoxPythonконечно. Не бойся учиться и читать документацию. Она не кусается, а пользу приносит огромную.
Ну, караул же! Да и, кажись, я наврал чего-то в этой строке…
Офлайн
DaevaornЧего проповедовал бы? Я за помощью пришёл. Прошу написать мне, ежели не в тягость примерчик sql-запроса в питоне, в который вместо прямого указания полей подставляются переменные питона содержащие имена полей. Причём как в SELECT так и в WHERE.
ну так и проповедовал бы там.
DaevaornДокументации я накачал кучу. Читаю, пытаюсь спрограммировать, и, если не получается, иду на форум и прошу помощи. Я лично всегда готов помочь вопрошающему ежели знаю ответ на его вопрос, даже если это азбучные истины.
Не бойся учиться и читать документацию
Офлайн
В питоне делают так:
dbc.execute("select * from %s limit %s, 1" % (name, item))
cursor.execute("insert into Attendees values (?, ?, ?)", (name, seminar, paid) )
Отредактировано (Дек. 8, 2007 23:43:39)
Офлайн
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При этом вопрощающий должен быть “открыт” для получения ответа, а не придувать несуществующих языковых конструкций и ругаться из-за того, что они почему-то не работают.
Я лично всегда готов помочь вопрошающему ежели знаю ответ на его вопрос, даже если это азбучные истины.
Офлайн
За подсказку спасибо.
DaevaornА хотеть моё право, если фокспро не делает так как я хочу, то и ему я выражу своё фи, невзирая на собственные предпочтения. Для меня язык лишь средство разработки, а не… некий родственник которого нужно защищать от посягательств неверных :)
Со словами: “почему не работатет так как я хочу, ведь в языке N так работает и это круто”. Так о помощи не просят.
FerromanА если я хочу и Аttendees указать не напрямую, а опять же через переменную указывающую на Attendes (содержащую строку с этим именем таблицы)
cursor.execute(“insert into Attendees values (?, ?, ?)”, (name, seminar, paid) )
Офлайн