abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

včera 22:44 | Nová verze

Ani ne po měsíci vývoje od vydání verze 2.10.0 byla vydána nová verze 2.10.2 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP. Přehled novinek i s náhledy v oznámení o vydání. Opraveno bylo 44 chyb. Novinkou je podpora formátu HEIF (High Efficiency Image File Format) a dva nové filtry.

Ladislav Hagara | Komentářů: 1
včera 17:44 | Komunita

SFC (Software Freedom Conservancy) na svém blogu blahopřeje společnosti Tesla k prvnímu kroku k dodržování licence GPL. Tesla ve svých elektromobilech používá svobodný software. Změny ve zdrojovým kódech ale doteď veřejně nezveřejňovala. Změna nastala tento týden. Zdrojové kódy byly zveřejněny na GitHubu. Nejedná se zatím ale o kompletní odpovídající zdrojové kódy (CCS - complete corresponding source).

Ladislav Hagara | Komentářů: 6
19.5. 17:33 | Komunita

Společnost Purism informuje o aktuálním vývoji chytrého telefonu Librem 5, jenž by měl respektovat bezpečnost, svobodu a soukromí uživatelů. Telefon už umí telefonovat. Librem 5 by měl být k dispozici v lednu 2019. Předobjednat jej lze za 599 dolarů.

Ladislav Hagara | Komentářů: 19
19.5. 09:00 | Bezpečnostní upozornění

Společnost Qualys zveřejnila výsledky bezpečnostního auditu procps-ng, tj. balíčku s příkazy free, kill, pgrep, pidof, pkill, pmap, ps, pwdx, skill, slabtop, snice, sysctl, tload, top, uptime, vmstat, w a watch. Nalezeno bylo 7 bezpečnostních chyb (CVE-2018-1120, CVE-2018-1121, CVE-2018-1122, CVE-2018-1123, CVE-2018-1124, CVE-2018-1125 a CVE-2018-1126). Dvě z nich jsou zneužitelné k lokální eskalaci práv. Příslušné záplaty jsou již k dispozici v upstreamu.

Ladislav Hagara | Komentářů: 5
18.5. 06:44 | Nová verze

Byla vydána třiadvacátá alfa verze svobodné historické realtimové strategie 0 A.D. (Wikipedie). Kódový název této nejnovější verze je Ken Wood. Představení novinek v poznámkách k vydání a také na YouTube.

Ladislav Hagara | Komentářů: 3
18.5. 05:55 | Zajímavý článek

Tento týden se v Cambridge ve Velké Británii konal hackfest, který měl za cíl zlepšit výkon na GNOME postavených systémů na slabších počítačích. Hans de Goede například analyzoval spotřebu paměti jednotlivých komponent ve Fedora 28 Workstation na stroji s 2 GB RAM a pomocí kroků popsaných v článku Kde uspořit paměť ve Fedora Workstation na MojeFedora.cz snížil spotřebu paměti z 1,4 GB na 765 MB.

Ladislav Hagara | Komentářů: 8
17.5. 20:55 | Nová verze

Bram Moolenaar oznámil vydání verze 8.1 textového editoru Vim (Vi IMproved). Hlavní novinkou je integrovaný terminál.

Ladislav Hagara | Komentářů: 8
17.5. 16:55 | Nová verze

Bylo oznámeno vydání nové stabilní verze 1.27 a beta verze 1.28 open source textového editoru Atom (Wikipedie). Přehled novinek i s náhledy v příspěvku na blogu. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 6
17.5. 11:11 | Nová verze

Byla vydána verze 5.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Před měsícem slavil Proxmox VE 10 let (pdf).

Ladislav Hagara | Komentářů: 16
17.5. 10:22 | Nová verze

Byla vydána verze 4.8 a záhy na to opravná verze 4.8.1 svobodné náhrady proprietárních BIOSů coreboot (Wikipedie). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 11
Používáte pro některé služby inetd?
 (33%)
 (25%)
 (42%)
Celkem 132 hlasů
 Komentářů: 3, poslední 9.5. 08:05
    Rozcestník

    Dotaz: Konstruovani SQL dotazu.

    7.8.2011 16:33 Z.
    Konstruovani SQL dotazu.
    Přečteno: 253×
    Zdravim, pri programovani s relacnimi databazemi se casem nevyhnu pouzivani konstrukci jako:
    
    sql = "SELECT columnB FROM something WHERE columnA IN (%s)" % ', '.join(very_long_list)
    
    ######
    
    pairs = []
    
    for pair in very_long_list:
        pairs.append("columnA = %s AND columnB = %s" % pair)
    
    sql = 'SELECT * FROM something WHERE %s;' % ' OR '.join(pairs)
    
    Pricemz very_long_list je vstup "zvenku" (napr. od uzivatele). Da se tomu nejak vyhnout nebo to vyplyva primo z podstaty jazyka SQL?

    Řešení dotazu:


    Odpovědi

    7.8.2011 17:25 Kit
    Rozbalit Rozbalit vše Re: Konstruovani SQL dotazu.
    Zkusil jsem to přes virtuální tabulku, je možné použít i temporary:

    Nejprve tabulka v databázi:
    CREATE TABLE pairs (key text, key2 text, nazev text);
    CREATE INDEX ipairs on pairs(key);
    CREATE INDEX ipairs2 on pairs(key2);
    INSERT INTO "pairs" VALUES('ab','ec','abeceda');
    INSERT INTO "pairs" VALUES('be','du','beduín');
    INSERT INTO "pairs" VALUES('ci','zi','cizinec');
    INSERT INTO "pairs" VALUES('de','kl','deklarace');
    
    a teď dotaz, kde very_long_list=(ax,be,ci,an):
    SELECT DISTINCT nazev FROM (SELECT 'ax' AS klic
       UNION ALL SELECT 'be'
       UNION ALL SELECT 'ci'
       UNION ALL SELECT 'an') AS dotaz
       JOIN pairs ON dotaz.klic=key OR dotaz.klic=key2;
    Je to sestavené narychlo a možná to i rychlé bude.

    okbob avatar 7.8.2011 18:47 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
    Rozbalit Rozbalit vše Re: Konstruovani SQL dotazu.
    Osobně pochybuji, že běžný uživatel dá dohromady něco, co bych mohl označit jako "very_long_list". Nebojíte se subselectů?

    SELECT * FROM tab WHERE a = (SELECT a FROM tab2 WHERE rozumná_podmínka)
    SELECT * FROM tab JOIN tab2 ON .. WHERE rozumna_podminka

    Pokud seznam získáváte z jiné tabulky, tak vhodnější bude použít JOIN nebo subselect. Jinak holt není zbytí - pro několik desítek až stovek hodnot v seznamu byste nemusel mít problém. Tisíce až desetitisíce už by mohlo způsobovat problémy - bude záležet na db, kterou používáte a na tom jak moc či málo jí to rozhodí statistiky.
    Josef Kufner avatar 7.8.2011 20:27 Josef Kufner | skóre: 68
    Rozbalit Rozbalit vše Re: Konstruovani SQL dotazu.
    Koukni na DibiFluent – hodně ti to pomůže s vytvářením dotazů jako takových.

    Neboj se joinů a subselectů. Občas very_long_list potřeba je, ale jen málokdy bývá tak dlouhý, aby to vadilo.
    Hello world ! Segmentation fault (core dumped)
    7.8.2011 21:12 Ivan
    Rozbalit Rozbalit vše Re: Konstruovani SQL dotazu.
    Moje odpoved bude trochu "Oracle centristic", ale to snad nevadi. To co hledas se jmenuje "dynamic where clause", zkus to zadat do google a najdes o tom dost clanku. Pro SQL je dulezite to, ze to neni scriptovaci jazyk. I kdyz to neni videt SQL je kompilovane do bytecode a z toho vychazeji ruzna omezeni - zadny eval, kazdy sql statement musi mit pevny pocet vstupnich parametru, pevna jmena tabulek. Pokud potrebujes pro SQL volitelny pocet parametru, tak je nejjednodussi vlozit data do temp. table a pak udelat join s tou docasnou tabulkou.
    8.8.2011 08:21 Filip Jirsák | skóre: 67 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Konstruovani SQL dotazu.
    Vyhnout se tomu dá a měl byste se tomu vyhnout, jinak ty dotazy bude možné zneužít k SQL injection.

    V prvním případě jednoduše použijte parametr až na úrovni funkcí ovladače SQL. Tj. vytvoříte dotaz např.
    SELECT columnB FROM something WHERE columnA IN (?)
    a pak před voláním dotazu nastavíte ten parametr na zadané hodnoty. Má to i tu výhodu, že ovladač nebo databáze může tenhle dotaz rozparsovat (a případně i nějak optimalizovat) při prvním použití, a při opakovaném použití už si to jen vytáhne z cache. V Pythonu by to bylo asi takhle:
    c.execute('SELECT columnB FROM something WHERE columnA IN (?)', (very_long_list,))
    Ve druhém případě to takhle jednoduše udělat nejde (když máte proměnlivý počet parametrů), ale pořád bude lepší poskládat za běhu parametrizovnaý dotaz a ten pak naplnit parametry – abyste se vyhnul SQL injection. Připadá mi ale ten druhý dotaz poněkud divný, kdyby bylo jasné, co tím chcete řešit, možná existuje nějaké lepší řešení.

    Jak se používají

    Založit nové vláknoNahoru

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

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.