Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 8, 2007 18:35:13

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

a='Иванов' print 'Фамилия %(a)s' Почему не работает?

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)
Меня этот вариант не устраивает! Когда много полей так делать неудобно (лично мне)



Офлайн

#2 Дек. 8, 2007 19:25:49

lukke
От:
Зарегистрирован: 2007-01-01
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

a='Иванов' print 'Фамилия %(a)s' Почему не работает?

попался такой пример

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)

Офлайн

#3 Дек. 8, 2007 19:51:34

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

a='Иванов' print 'Фамилия %(a)s' Почему не работает?

Ой-Ё! Да это же караул-записи!
А что никак чтоли нормально не сделать что-то подобное:
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-запрос из строковых переменных. Тоже неплохой караул получается. :(



Офлайн

#4 Дек. 8, 2007 20:27:27

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

a='Иванов' print 'Фамилия %(a)s' Почему не работает?

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



Отредактировано (Дек. 8, 2007 20:28:42)

Офлайн

#5 Дек. 8, 2007 21:32:40

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

a='Иванов' print 'Фамилия %(a)s' Почему не работает?

Daevaorn
то как раз и есть ненормально. чужой монастырь….
Мой монастырь - фокспро. Там работа с базой данных проще пареной репы.
Но, вот, приспичило мне питон изучать и я к вам припёрси… :)

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

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

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

Daevaorn
почему? у всех получается:)
cu.execute(“SELECT %s ,%s FROM %s WHERE %s=%s”, (fam, im, table, fam, ‘Хрюкин’))
Ну, караул же! Да и, кажись, я наврал чего-то в этой строке…



Офлайн

#6 Дек. 8, 2007 22:04:18

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

a='Иванов' print 'Фамилия %(a)s' Почему не работает?

FoxPython
Мой монастырь - фокспро. Там работа с базой данных проще пареной репы.
ну так и проповедовал бы там. Чего тебе питон то сдался тогда? А уж если нужен питон, то соизволь принять его правила игры.
FoxPython
И вариант со словарём считается удобным? Мамочки… Код выглядит как… код smile который раскодировать нужно. Шифровка, короче, непонятная.
Шифровка это когда переменные из кода подставляются в строку автоматически. Не понятно откуда что берется и где эту переменную искать. А тут всё в одном месте, что гораздо удобней, практичней и безопасней.
FoxPython
Что-то я, видимо, недопонимаю чего %(n)s делает
видимо да
FoxPython
Ну, караул же! Да и, кажись, я наврал чего-то в этой строке…
конечно. Не бойся учиться и читать документацию. Она не кусается, а пользу приносит огромную.



Офлайн

#7 Дек. 8, 2007 23:15:43

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

a='Иванов' print 'Фамилия %(a)s' Почему не работает?

Daevaorn
ну так и проповедовал бы там.
Чего проповедовал бы? Я за помощью пришёл. Прошу написать мне, ежели не в тягость примерчик sql-запроса в питоне, в который вместо прямого указания полей подставляются переменные питона содержащие имена полей. Причём как в SELECT так и в WHERE.

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

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

Daevaorn
Не бойся учиться и читать документацию
Документации я накачал кучу. Читаю, пытаюсь спрограммировать, и, если не получается, иду на форум и прошу помощи. Я лично всегда готов помочь вопрошающему ежели знаю ответ на его вопрос, даже если это азбучные истины.



Офлайн

#8 Дек. 8, 2007 23:26:54

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

a='Иванов' print 'Фамилия %(a)s' Почему не работает?

В питоне делают так:

dbc.execute("select * from %s limit %s, 1" %  (name, item))
или так:
cursor.execute("insert into Attendees values (?, ?, ?)", (name, seminar, paid) )
в документации все написано.
Использовать переменные с именами прямо в запросе нельзя, насколько я знаю.

Отредактировано (Дек. 8, 2007 23:43:39)

Офлайн

#9 Дек. 8, 2007 23:33:58

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

a='Иванов' print 'Фамилия %(a)s' Почему не работает?

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
Я лично всегда готов помочь вопрошающему ежели знаю ответ на его вопрос, даже если это азбучные истины.
При этом вопрощающий должен быть “открыт” для получения ответа, а не придувать несуществующих языковых конструкций и ругаться из-за того, что они почему-то не работают.



Офлайн

#10 Дек. 9, 2007 00:16:21

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

a='Иванов' print 'Фамилия %(a)s' Почему не работает?

За подсказку спасибо.

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 (содержащую строку с этим именем таблицы)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version