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 13:11 | Komunita

Mozilla.cz informuje o 2 plánovaných novinkách ve Firefoxu. Nové webové funkce budou ve Firefoxu dostupné jen přes HTTPS (en) a nové verze Firefoxu přinesou rychlejší přepínání panelů (předehřívání nebo žhavení panelů, anglicky tab warming).

Ladislav Hagara | Komentářů: 4
včera 12:44 | IT novinky

Hodnota Bitcoinu, decentralizované kryptoměny, klesla na cca 12 000 dolarů. Před měsícem byla hodnota Bitcoinu téměř 20 000 dolarů [reddit].

Ladislav Hagara | Komentářů: 9
včera 05:55 | Bezpečnostní upozornění

Bezpečnostní tým Cisco Talos upozorňuje na celou řadu bezpečnostních chyb v Blenderu. Vývojáři Blenderu byli o chybách informování již v září. Dosud tyto chyby ale opraveny nebyly. Doporučeno je neotevírat v Blenderu soubory z nedůvěryhodných zdrojů.

Ladislav Hagara | Komentářů: 2
15.1. 17:22 | Bezpečnostní upozornění

Společnost F-Secure upozorňuje na bezpečnostní "problém" v Intel AMT (Active Management Technology). Útočník s fyzickým přístupem k počítači s povoleným AMT a nenastaveným heslem k MEBx (Management Engine BIOS Extension) může obejít heslo nastavené v BIOSu, pin v TPM, přihlašovací jméno a heslo do operačního systému nebo i šifrování disků restartováním tohoto počítače a při jeho startu zavedením MEBx (CTRL-P) a zadáním výchozího hesla "admin". Pak už útočníkovi stačí pouze změnit heslo a povolit vzdálený přístup k počítači na úrovni AMT.

Ladislav Hagara | Komentářů: 10
15.1. 15:11 | Zajímavý projekt

Na Indiegogo byla dnes spuštěna kampaň na podporu 6 palcového notebooku a kapesní herní konzole GPD WIN 2. Cena v rámci kampaně byla stanovena na 649 dolarů. Cílová částka 100 tisíc dolarů byla překonána již 8 krát. Ukázka s Linuxem na YouTube.

Ladislav Hagara | Komentářů: 4
15.1. 05:55 | Bezpečnostní upozornění

V GitLabu, v open source alternativě GitHubu, tj. v softwarovém nástroji s webovým rozhraním umožňujícím spolupráci na zdrojových kódech, byl nalezen vážný bezpečnostní problém. Bezpečnostní aktualizace bude vydána ve středu 17. ledna v 00:59.

Ladislav Hagara | Komentářů: 3
15.1. 04:44 | Komunita

Firefox končí s podporou GTK+ 2. Od verze 59 bude možné Firefox sestavit pouze s GTK+ 3 [reddit].

Ladislav Hagara | Komentářů: 30
15.1. 01:22 | Pozvánky

První letošní pražský sraz spolku OpenAlt se koná již tento čtvrtek 18. ledna od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Vítáni jsou všichni příznivci svobodného softwaru a hardwaru, ESP32, DIY, CNC, SDR nebo dobrého piva. Prvních deset účastníků srazu obdrží samolepku There Is No Cloud… just other people's computers. od Free Software Foundation.

xkucf03 | Komentářů: 0
15.1. 00:11 | Pozvánky

Spolek OpenAlt zve příznivce otevřených technologií a otevřeného přístupu na 148. brněnský sraz, který proběhne v pátek 19. ledna od 18:00 hodin v MIKI pub & restaurant na Makovského náměstí 3166/2. Sraz je spojen s návštěvou (již v 16:30) Ústavu fyzikálního inženýrství Fakulty strojního inženýrství Vysokého učení technického v Brně.

Ladislav Hagara | Komentářů: 0
13.1. 23:22 | Nová verze

Po čtyřech měsících vývoje od vydání verze 5.7.0 byla vydána verze 5.8.0 správce digitálních fotografií digiKam (digiKam Software Collection). V Bugzille bylo uzavřeno 231 záznamů. Ke stažení je také balíček ve formátu AppImage (Wikipedie).

Ladislav Hagara | Komentářů: 0
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (7%)
 (1%)
 (1%)
 (1%)
 (77%)
 (13%)
Celkem 1306 hlasů
 Komentářů: 48, poslední 22.12. 22: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: 67
    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.