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?
- 1035 megtekintés
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"
- A hozzászóláshoz be kell jelentkezni
Ebben az esetben a 'string formatting' lenne az igazan elegans. Valahogy igy:
cur.execute("lnsert into konyvek(szerzo, cim, kiado, kiadas, terjedelem) values (%s, %s, %s, %d, %d)" % (kszerzo, kcim, kkiado, kkiadas, kterjedelem))
- A hozzászóláshoz be kell jelentkezni
vagy :)
data = {'kszerzo': 'valaki',
'kcim': 'valami',
'kkiado': 'kiado',
'kiadas': 0,
'kterjedelem': 120 }
cur.execute("lnsert into konyvek(szerzo, cim, kiado, kiadas, terjedelem) values \
(%(kszero)s, %(kcim)s, %(kkiado)s, %(kiadas)d, %(kterjedelem)d)" % data)
- A hozzászóláshoz be kell jelentkezni
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')
- A hozzászóláshoz be kell jelentkezni
#!/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)
- A hozzászóláshoz be kell jelentkezni
(Ubuntu Edgy - Python 2.4)
- A hozzászóláshoz be kell jelentkezni
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!
- A hozzászóláshoz be kell jelentkezni
Szivesen.
- A hozzászóláshoz be kell jelentkezni
De a http://gadfly.sourceforge.net/gadfly.html#dynamic-values
szerint megy a szabvány
cur.execute('in sert into konyvek (szerzo, cim, kiado, kiadas, terjedelem) values ('
+ (', '.join(['?']*5)) + ')', (kszerzo, kcim, kkiado, kkiadas, kterjedelem))
forma is.
- A hozzászóláshoz be kell jelentkezni
A query rész megy, de sajnos így is ugyanazt azt a hibauzenetet adja. A gadfly hibája lehet. (De nem biztos.)
Csak az bosszant, hogy ha konstansokat írok be értéknek akkor jó.
- A hozzászóláshoz be kell jelentkezni
>>> print valtozo1, valtozo2 #idezojelek nelkul
>>> print valtozo1 + ',' + valtozo2 #ha kell a vesszo is
- A hozzászóláshoz be kell jelentkezni
Egy komplett SQL utasítást kellene átadnom stringben paraméterként, és azon a stringen belül vannak a változók.
Itt hogy lehet megoldani?
- A hozzászóláshoz be kell jelentkezni
lsd. fentebb ;)
- A hozzászóláshoz be kell jelentkezni
Köszi, ezt kipróbálom.
(keresztbe kérdeztünk/válaszoltunk, de nem baj)
- A hozzászóláshoz be kell jelentkezni