Python: Робота з базою даних, 1/2 частина: Використовуємо DB-API

Python DB-API – це не конкретна бібліотека, а набір правил, яким підпорядковуються окремі модулі, що реалізують роботу з конкретними базами даних. Окремі нюанси реалізації для різних баз можуть відрізнятися, але загальні принципи дозволяють використовувати один і той же підхід при роботі з різними базами даних.

У статті розглянуто основні методи DB-API, що дозволяють повноцінно працювати з базою даних. Повний список можете знайти за посиланнями в кінець статті.

Необхідний рівень підготовки: базове розуміння синтаксису SQL і Python.

Читати далі →

Нова SQLite ORM для C++

Всім привіт. Пишу на Хабре вперше, не судіть строго. Хочу поділитися своїм досвідом пошуку універсальної SQLite ORM бібліотеки на С++ і моєю новою розробкою власної бібліотеки для роботи з SQLite на C++ sqlite_orm.
Коли я шукав ORM'ку я відштовхувався від декількох ключових пунктів:
  • бібліотека повинна мати як CRUD, так і не CRUD
  • повинні бути гнучкі умови WHERE, а не тупо
    WHERE id = ?
  • повинен бути функціонал міграцій (синхронізації схеми) на випадок оновлень додатка
  • фічі начебто ORDER BY і LIMIT теж повинні бути
  • серіалізація класів не повинна бути написана в своїх класах. Це дуже важливий пункт для мене з тих пір, як я познайомився з Java і з Android-розробкою зокрема. Android-розробники намагаються дотримуватися принципу єдиної відповідальної (single responsibility principle), що дуже важливо якщо додаток зібрано з різною купи бібліотек і модулів, які можуть змінюватися з плином часу. І тому найпопулярніша на github SQLite ORM'ка на С++ hiberlite мене не влаштувала способом серіалізації — клас моделі повинен мати статичну функцію
    serialize
    з кодом безпосередній серіалізації. Я шукав такий модуль, від якого би не залежав код моєї моделі даних. Адже у мене може бути кілька сериализаторов (JSON, XML, SQLite), і по-хорошому кожен повинен додаватися до моделі даних, але ніяк її не міняти, а інакше вийде каша в коді моделі.

Читати далі →

Генерація фіктивних даних з Elizabeth: Частина II

image
Раніше я вже публікував статтю про те, як генерувати фіктивні дані за допомогою Elizabeth — бібліотеки для мови програмування Python. Стаття, яку ви читаєте є продовженням попередньої, тому я не буду приводити основ роботи з бібліотекою. Якщо ви пропустили статтю, полінувалися прочитати або просто не захотіли, то, ймовірно, захочете зараз, бо ця стаття передбачає, що читач вже знайомий з основами бібліотеки. У цій частині статті я буду говорити про те, яким чином організовувати генерацію фіктивних даних у власних програмах, розповім про кількох, на мій погляд, корисних особливості бібліотеки.
Читати далі →

Чергова Reflection Library і ORM для C++



Відразу попереджу про велосипедности выдаемого тут на огляд. Якщо прочитання заголовка викликає лише з працею придушений вигук «Твою матір, тільки не новий таксон ORM!», то напевно краще утриматися від подальшого читання, щоб не підвищувати рівень агресії в космологическом бульйоні, в якому ми плаваємо. Виною появи цієї статті стало те, що вряди-годи видався у мене відпустка, протягом якого вирішив я спробувати себе на ниві написання блогопостов за околохабровской тематиці, і пропонована тема мені здалася цілком для цього підходить. Крім того, тут я надесь отримати конструктивну критику, і можливо зрозуміти чого ж з цим можна зробити такого цікавого. В кінці буде посилання на github-репозиторій, в якому можна подивитися код.

Читати далі →

Профілювання запитів до SQLite для додатків Qt

Є типова ситуація:

  • кимось написане додаток на Qt;
  • користувачі скаржаться, що програма під час роботи жерем багато CPU;
  • профілювальник і strace вказують на те, що відбувається ґвалтування бази.
У такій ситуації хочеться подивитися що за запити, їх кількість, час виконання. Якщо в PostgreSQL є pg_stat_statements і pgBadger, то для SQLite довелося написати свій самокат. Самокат представляє з себе виклик sqlite3_profile для кожного з'єднання, запис отриманої інформації у журнал.


Читати далі →

Знайомство з FireUI

Нещодавно ми опублікували серію статей, присвячених розробці додатків в FireMonkey. Тоді ми описали ключові моменти побудови програми, в тому числі створення бази даних, підключення до даних за допомогою технології LiveBinding, розгортання програми на мобільній платформі. Однак, детально розглядати нюанси створення мобільних додатків ми не стали. Багато в чому це пов'язано з тим, що сам процес мобільного розробки в Delphi еволюціонує від версії до версії. Зокрема, в останній XE7 на сьогоднішній день версії Delphi, був представлений новий дизайнер форм FireUI Multi-Device Designer. У даній статті за допомогою невеликого прикладу ми розглянемо, що ж із себе представляє FireUI і яким чином з його появою змінилася методологія розробки.



Читати далі →

Шифрування SQLite бази даних в Qt

Для шифрування в SQLite були знайдені можливі наступні рішення:
  • SEE — офіційна реалізація.
  • wxSQLite — c++ wxWidgets обгортка для шифрування SQLite.
  • SQLCipher — використовує в реалізації openSSL.
  • SQLiteCrypt — модифікована реалізація API.
  • botansqlite3 — шифрувальний кодек для SQLite3 використовує бібліотеку ботан.
  • SQLiteCrypto — java API для Android, використовує AES-256 і SHA-256.
  • QtCipherSqlitePlugin — SQL плагін для Qt з підтримкою шифрування.
З розглянутих рішень SEE, SQLiteCrypt and SQLiteCrypto вимагають придбання ліцензії. SQLCipher доступний у версії Community Edition, але вимагає libcrypto.

Найбільш цікавим рішенням з представленого списку, на мій погляд, є QtCipherSqlitePlugin.
Плагін шифрування «на льоту» і повністю інтегрований в API Qt.

Читати далі →

Розблокування телефону Lenovo глибинними методами

Купив я якось Lenovo A706 — і був я ним задоволений, і задоволений вельми. Знайшлася, правда, пара пов'язаних з самостійністю екрану Глючка, хоча в цілому — цілком придатний апарат. Але одного разу, в одну темну-темну ніч на дачі трапилася з ним біда. Лежав він собі і заряджався. Перед цим пропадало світло, і я спеціально на ніч відключив передачу даних, щоб зберегти батарейку, якщо світло знову згасне. І залишив я його лежати мордою вниз…
Читати далі →

Лікуємо SQLite в Monotouch або практична користь рефлексії

    Робота з дітищем Xamarin цікаве і сповнене сюрпризів, як в хорошому сенсі слова, так і в поганому. Одні проблеми вирішуються за допомогою гугла і StackOverflow, інші ж вимагають нестандартного підходу. У даній статті я хочу розповісти історію про те, як можна за допомогою початкових кодів, рефлексії та трьох кухлів чаю вирішити одну дуже неприємну проблему.
 
 
Читати далі →