Portál AbcLinuxu, 3. listopadu 2025 15:31
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!
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
)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.