Na Kickstarteru běží kampaň na podporu kapesního počítače s Linuxem CardputerZero od společnosti M5Stack. Postaven je na Raspberry Pi Compute Module 0. Podporuje moduly M5. Koupit lze s rozšířeními LoRa a CC1101.
Tento týden se bude vyznačovat zejména deštěm, a proto vás může zajímat, že již v úterý proběhne 63. Virtuální Bastlírna, která se bude odehrávat přímo v teple vašich domovů a bastlíren. Proto se připojte k této volné otevřené diskuzi bastlířů, techniků, vědců, ve které se probírají novinky a zajímavá témata z techniky. Mezi největší novinky bude tentokrát patrně patřit oznámení hackerského nástroje Flipper One. Zároveň úspěšně probíhá
… více »86Box (Wikipedie), tj. emulátor retro počítačů založených na x86, byl vydán ve verzi 6.0. Přibyly například zvuky pevného disku. Na GitHubu jsou vedle zdrojových kódů ke stažení také připravené balíčky ve formátu AppImage.
Byla vydána nová verze 4.6 audio přehrávače Audacious (Wikipedie). Z novinek lze vypíchnout nový plugin pro procházení soubory, podporu audio formátu Musepack SV8 nebo přechod na build systém Meson.
Alliance for Open Media vydala verzi 1.0.0 specifikace svobodného videoformátu AV2. Jean-Baptiste Kempf, prezident neziskové organizace VideoLAN stojící za svobodným multiplatformním multimediálním přehrávačem a frameworkem VLC, představil na svém blogu dekodér AV2 s názvem dav2d.
V aktuálním přehledu vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie) bylo oznámeno vydání nové verze 0.2.0.
Armbian, tj. linuxová distribuce založená na Debianu a Ubuntu optimalizovaná pro jednodeskové počítače na platformě ARM a RISC-V, ke stažení ale také pro Intel a AMD, byl vydán ve verzi 26.5.1. Přehled novinek na GitHubu.
Byla vydána nová stabilní verze 26.05 linuxové distribuce NixOS (Wikipedie). Její kódové označení je Yarara. Podrobný přehled novinek v poznámkách k vydání. O balíčky se v NixOS stará správce balíčků Nix.
Byla vydána verze 1.96.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
Společnosti IBM a Red Hat představily Project Lightwell s investicí 5 miliard dolarů. Jedná se o důvěryhodné clearingové centrum pro bezpečnost open source softwaru a zabezpečení dodavatelských řetězců s novým AI modelem a globální skupinou více než 20 000 softwarových inženýrů. Služby centra budou dostupné prostřednictvím komerčních předplatných. Project Lightwell staví na iniciativách jako Anthropic Glasswing nebo OpenAI Trust Access for Cyber.
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:
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.
SELECT * FROM tab WHERE a = (SELECT a FROM tab2 WHERE rozumná_podmínka) SELECT * FROM tab JOIN tab2 ON .. WHERE rozumna_podminkaPokud 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.
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í
Tiskni
Sdílej: