Pythonban változó értékének kifejtése egy sztringen belül.

Azt hogy kell pythonban megcsinálni, hogy


print "valtozo1, valtozo2"

parancs hatására a valtozo1 és a valtozo2 étékét írja, ki ne a nevüket?

Hozzászólások

Pythonban írok CGI-t. A gadfly-t használom adatbáziskezelésre. Egy meglévő "Konyvtar" adatbázis "konyvek" adattábláját szeretném bővíteni, valahogy így:


cur.execute("lnsert into konyvek(szerzo, cim, kiado, kiadas, terjedelem) values (kszerzo, kcim, kkiado, kkiadas, kterjedelem)")

A kszerzo, kcim, kkiado, kkiadas, kterjedelem változók, melyek a megfelelő mezőtartalmat tartalmazzák. Az utolsó kettő integer a többi varchar típusu.
Igenám, de az idézőjelek miatt nem az értékük helyettesítődik be az insert parancsba, hanem a nevük. Hogy lehetne, kifejteni a véltozókat.
Van itt olyan lehetőség, mint a Clipperben: "&VALTOZO_NEV"

Sajnos egyik verziót sem fogadja el a gadfly.
Pedig most nem cgi-ként futtatom, hanem egy "init_konyvtar.py" scriptben van:


#!/usr/bin/python
# -*- coding: iso-8859-2 -*-
#


import gadfly
adatBazis = gadfly.gadfly()
adatBazis.startup("konyvtar","C:/_dejo/WWW/ADATOK")

kszerzo = 'Benedek Elek'
kcim  = 'Több sincs Királyfi'
kkiado = 'Móra Kiadó'
kkiadas =  1999
kterjedelem = 136

cur = adatBazis.cursor()
cur.execute("create table konyvek (szerzo varchar, cim varchar, kiado varchar, kiadas integer, terjedelem integer)")
# cur.execute("lnsert into  konyvek (szerzo, cim, kiado, kiadas, terjedelem) values \ 
  ('Benedek Elek', 'Több sincs Királyfi', 'Móra Kiadó', 1997, 287)")

cur.execute("lnsert into  konyvek (szerzo, cim, kiado, kiadas, terjedelem) values \
  (%s, %s, %s, %d, %d)" % (kszerzo, kcim, kkiado, kkiadas, kterjedelem))

adatBazis.commit()

Ha a kikommentezett sort hagyom benne az alatta levőt pedig kiveszem akkor megy.
Igy egy csomó hibaüzenetet ad:


...
  File "C:\Python24\Lib\site-packages\gadfly\kjParser.py", line 811, in ParseError
    raise SyntaxError, 'unexpected token sequence.' + data
SyntaxError: unexpected token sequence.near ::
'delem) values ('*'Benedek Elek, T'
*******************************
current state = 199
expects: 
'numeric_literal', 'character_string_literal', '?', '+', '-', 
('nomatch1',)
current token = ((-8, 'user_defined_name'), 'BENEDEK')

#!/usr/bin/python
# -*- coding: iso-8859-2 -*-

kszerzo = 'Benedek Elek'
kcim  = 'Több sincs Királyfi'
kkiado = 'Móra Kiadó'
kkiadas =  1999
kterjedelem = 136

file = open('file', 'a')
file.write("lnsert into  konyvek (szerzo, cim, kiado, kiadas, terjedelem) values \
           (%s, %s, %s, %d, %d)" % (kszerzo, kcim, kkiado, kkiadas, kterjedelem))
file.close()

Ez igy tokeletesen mukodik nalam. Probald meg igy plz:


query = "lnsert into  konyvek (szerzo, cim, kiado, kiadas, terjedelem) values \
         (%s, %s, %s, %d, %d)" % (kszerzo, kcim, kkiado, kkiadas, kterjedelem)
print query # ha ez jot ad vissza, akkor az also kommentet vedd ki
#cur.execute(query)

Megvan! A query értékén kell egy picit javítani.
query = "lnsert into konyvek (szerzo, cim, kiado, kiadas, terjedelem) values ('%s', '%s', '%s', %d, %d)" % (kszerzo, kcim, kkiado, kkiadas, kterjedelem)
Szóval a %s -eket aposztrofok közé kell tenni!
:-{))))E
1000 köszönet neked frank!

>>> print valtozo1, valtozo2 #idezojelek nelkul
>>> print valtozo1 + ',' + valtozo2 #ha kell a vesszo is