Portál AbcLinuxu, 8. května 2025 08:25

Dotaz: python & sqlite: české řazení v "order by"?

17.8.2007 12:10 vencas | skóre: 32
python & sqlite: české řazení v "order by"?
Přečteno: 2010×
Odpovědět | Admin
Chci aby mi select v sqlite vrátil položky setříděné podle příjmení, např.
select firstname, lastname from students where grp='7a' order by lastname
. Ovšem i přes nastavené locale (LC_ALL,LC_COLLATE oboje cs_CZ.UTF-8) se výsledek setřídí špatně, patrně podle unicode pozic: všecha akcentovaná písmena jsou na konci.

Nevím, jestli je to problém v sqlite nebo v pythonu, řekl bych že v prvním. Sice si můžu výsledek dodatečně přerovnat v nějakém poli přes
pole.sort(lambda a,b: locale.strcoll(a,b))
nebo
pole.sort(key=locale.strxfrm)
, ale to jaksi není ono.

Ví někdo jak na to? Dík moc!
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

17.8.2007 12:28 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: python & sqlite: české řazení v "order by"?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Podívejte se na část 7 v dokumentaci. Asi bude nutné najít nebo napsat příslušnou funkci pro porovnání.
17.8.2007 12:33 vencas | skóre: 32
Rozbalit Rozbalit vše Re: python & sqlite: české řazení v "order by"?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Aha, tak už jsem na to snad přišel...
import locale
locale.setlocale(locale.LC_ALL, '') ## LC_ALL=cs_CZ.UTF-8
[...] 
con.create_collation("lexical", locale.strcoll)
con.execute("select firstname,lastname from students where grp='7a' order by lastname collate lexical")
, případně vytváření tabulky uvést ke příslušným textovým sloupcům "COLLATE lexical". V každém skriptu je však třeba lexical znovu nadefinovat pomocí create_collation, neboť v databázi je uloženo jen její jméno.

Omlouvám se za triviální dotaz i možná triviální odpověď, poprvé v životě si hraju s databází (asi ne naposled; je to mnohem lepší než mít všechno v asociativních polích a inkludovaných skriptech jako dosud ;-) )
25.8.2008 09:34 JeCh
Rozbalit Rozbalit vše Re: python & sqlite: české řazení v "order by"?
Ahoj,

mám stejný problém s řazením. Použil jsem Tvůj způsob, ale nefunguje mi to.Například Š se řadí mezi K a L. Přitom funkce locale.strcoll() vrací vše správně.

Kde by mohl být problém? Díky.
25.8.2008 11:51 JeCh
Rozbalit Rozbalit vše Re: python & sqlite: české řazení v "order by"?
Tak nic, už jsem na to přišel. Windows neumí nic jinýho než cp1250, takže je před řazením nutný to převést.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.