[python] Unicode v databazi utf8

Ondrej Beranek rainbof na gmail.com
Neděle Leden 18 16:09:40 CET 2009


- K pouziti, nebude to na webu pujde jen o filtr fora ktery se bude starat o
jiste souvztaznosti. jednotlivych prispevku.
No co je to PEP vubec nevim. Rad si necham poradit (nasel jsem toto
http://www.python.org/dev/peps/pep-0249/ a to si v tydnu postupne prostuduji
jen co se mi to povede nekde vytisknout)
- Zda se ze charset v connection a mimo dela to same zrejme to slouzi ke
cteni dat z tabulek s jinou znakovou sadou. Kazdopadne jsem si pridal
charset do connect
- pokud bych smel poprosit o priklad , jak by melo vypadat schema kdy prectu
pomoci dotazu hodnotu a zase ji spravne ulozim ?

Ondrej Beranek

Dne 18. leden 2009 15:30 Petr Messner <petr.messner na gmail.com> napsal(a):

> Ahoj,
>
> execute("sql prikaz a v nem %s" % promennaOdUZivatele) neni osetreno
> proti stavu, kdy v promenne budou apostrofy, natoz proti SQL
> injection. Vola se to takto: execute("sql prikaz a v nem %s",
> promennaOdUZivatele). Ono si to tu operaci "%" (cili naformatovani
> nebo jak to chceme nazyvat) provede samo a zaroven to odescapuje
> nebezpecne znaky. Viz prislusne PEP, tusim ze je to PEP 249.




>
> Mimochodem, informace o kodovani se da dat uz funkci MySQLdb.connect.
> Databaze pak pracuje s a vraci unicode (tam kde je to relevantni).
> conn.set_character_set() mozna dela to same, nevim.



>
>
> Problem je, ze '\xa1[' neni validni retezec v kodovani UTF-8. Proto
> nefunguje x.decode(). MySQL to mozna take neumi prevest do utf-8,
> pokud to neukladas do blobu, ale do napr. textoveho sloupce s
> kodovanim utf8, i kdyz ve tvem pripade je to spis tim, ze v c.execute
> pouzivas operator %, jak jsem jiz psal, a tudiz problem s prevodem do
> utf-8 je uz na strane Pythonu/db ovladace.




>
>
> Snad jsem nic nepopletl, vyzkousel jsem si to :) Zdravim,
>
> PM
>
> Predpokladam, ze pracujeme v Python 2.x.
>
> 2009/1/18 Ondrej Beranek <rainbof na gmail.com>:
> > Tak jsem se dostal ve svem putovani Py svetem k dalsi zahade.
> >
> > pokousim se provest zapis do tabulky ovsem pokud string obsahuje nejake
> > nevhodne znaky tak se to neprovede a prevest mi to proste nejde.
> >
> > provadim toto:
> >
> > import _mysql
> > import MySQLdb
> >
> > conn = MySQLdb.connect (host = "localhost",
> >                         user = "root",
> >                         passwd = "",
> >                         db = "databaze")
> >
> > conn.set_character_set('utf8')
> > spojeni = conn.cursor ()
> > x='url=\xa1[img'
> >
> > spojeni.execute("UPDATE databaze.phpbb3_posts SET post_text = '%s' WHERE
> > phpbb3_posts.post_id =637797 LIMIT 1 ;"%x)
> > spojeni.close()
> >
> > a zde dostanu hlaseni
> > "Warning: Incorrect string value: '\xA1[img' for column 'post_text' at
> row
> > 1"
> > coz mi teda neni jasne string jako string. navic toto jsem z db prve
> precetl
> > a ted to potrebuju jen vratit zpet na puvodni misto ve tvaru v jakem to
> tam
> > bylo.
> >
> > No rekneme ze tedy neni slusne do databaze cpat unicode ovsem ono to
> spadne
> > i u prevodu
> >
> > print x.decode('utf-8')
> >
> > mi zakrici: UnicodeDecodeError: 'utf8' codec can't decode byte 0xa1 in
> > position 4: unexpected code byte
> > takze ted nejak nevim kudy kam.
> >
> >
> > _______________________________________________
> > Python mailing list
> > Python na py.cz
> > http://www.py.cz/mailman/listinfo/python
> >
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
------------- dal?í ?ást ---------------
HTML p?íloha byla odstran?na...
URL: <http://www.py.cz/pipermail/python/attachments/20090118/697a112f/attachment.htm>


Další informace o konferenci Python