logo
logo

Форум Доступ к БД AbilityCash из своего приложения на PYTHON

создать новую тему раскрыть все
Доступ к БД AbilityCash из своего приложения на PYTHON kst 11/05/2024 16:32 #написать ответ
Здравствуйте!
 
Подскажите, пожалуйста, а можно ли подключиться к моей БД AbilityCash напрямую из своего приложения на PYTHON и делать свои кастомные запросы?
 
Спасибо
Если Питон умеет работать с Sqlite, то да. Dervish 15/05/2024 13:14 #написать ответ
Думаю, что наверняка есть какая-то библиотека, просто на всякий случай оговорку сделал.
 
Единственное условие: файл не должен быть запаролен, потому что при установке пароля на файл данных все данные шифруются полностью. Вряд ли сможете найти библиотеку Python-SQLite с поддержкой шифрования, совместимую с используемой в AbilityCash.
 
Снимите пароль с файла данных (если он есть) и можете открыть файл любой программой, работающей с SQLite. Например, для просмотра данных я использую DB Browser for SQLite. Если будут какие-то вопросы по представлению данных, я готов на них ответить.
Python умеет работать с SQLite! kst 21/05/2024 14:03 #написать ответ
Большое спасибо за ответ!
 
Python умеет работать с SQLite! Я пробовал открыть БД всем, что у меня было: через SQLiteStudio, HeidiSQL(думал, может там - PostgreSQL) но у меня ничего не получилось. По-видимому, из-за пароля на БД. Плохо, что с паролем такая трабла. А что шифрование БД происходит получается на стороне AbilityCash?
Было бы странно, если б Python не умел работать с SQLite. Dervish 21/05/2024 14:29 #написать ответ
Ничего не получилось из-за пароля. Снимите пароль и файл легко откроется.
 
SQLite как библиотека с открытым исходным кодом, не включает в себя шифрование. Точнее, авторы SQLite сделали библиотеку для шифрования, но она далеко не бесплатная. Платить 1000 долларов ради использования её в бесплатном проекте меня жаба задушила. Поэтому я поискал и нашел бесплатное расширение. Оно работает нормально, шифрует отлично, но с использованием её из питона, как видите, проблемы.
 
Если Вам действительно нужно иметь доступ к данным из Питона, но при этом нежелательно хранение файла в открытом виде, могу порекомендовать создать виртуальный шифрованный диск при помощи VeraCrypt, в нём разместить AbilityCash и файл данных, да и прочие средства по работе с этим файлом, те, что сделаете на Питоне.
 
Кстати, на этом диске AbilityCash можно установить так, что вообще в системе не будет никаких следов программы.
Как это сделать описано в разделе "Документация" на этом сайте, там статья "AbilityCash на флэшке".
А может к Питону есть библиотека, которая может использовать это расширение? Ведь к Питону дохрена чего есть. (-) Amundsen 22/05/2024 11:30 #написать ответ
А как называется ваше расширение шифрации? kst 22/05/2024 19:01 #написать ответ
Может и в самом деле есть библиотека для Питона. На Питоне же много библиотек на С написанных. Вашу библиотеку шифрования и в самом деле могли и на питон портировать
Я использовал библиотеку из wxWidgets. Dervish 22/05/2024 20:25 #написать ответ
Библиотека называется wxSQLite, я использовал третью версию. Сейчас они переехали на github, ссылка есть на указанной странице.
 
Эта библиотека написана на С, так что нужно будет искать обертку для неё чтоб использовать из Python.
ЕМНИП wxWidgets есть для Питона. (-) Amundsen 23/05/2024 13:25 #написать ответ
wxSQLite нет в wxWidgets под Питон kst 27/05/2024 12:15 #написать ответ
Как я понял wxSQLite это кастомное решение под wxWidgets. И в wxWidgets под Питон нет wxSQLite.
какой метод щифрации вы используете в wxSQLite? kst 27/05/2024 12:19 #написать ответ
А вы случайно не помните какой метод щифрации вы используете в wxSQLite? Возможно если вы использовали SQLCipher или sqleet  - можно будет найти питон-библиотеку. Я связался с автором wxSQLite. Он пишет:
 
Насколько мне известно, в настоящее время не существует пакета Python для расширения
шифрования базы данных wxSQLite3 .
 
wxSQLite3 теперь основан на
проекте «Множественные шифры SQLite3» ( https://github.com/utelle/SQL ite3MultipleCiphers
), который поддерживает 6 различных методов шифрования. Некоторые из них,
например SQLCipher и sqleet, имеют пакеты Python. Какие методы
вам нужны?
 
В прошлом мое внимание несколько раз привлекало желание обеспечить соединение с Python . В принципе
такое соединение конечно можно было бы реализовать.
 
Однако возникает вопрос, какой тип соединения
следует поддерживать. Я знаю два очень разных подхода:
 
1. APSW Роджера Биннса ( https://github.com/rogerbinns/apsw )
 
2. pysqlite3 Чарльза Лейфера ( https://github.com/coleifer/p ysqlite3 ) ,
DB- Совместимость с API 2.0.
 
Вопрос в том, какой из этих интерфейсов следует предпочесть. Насколько мне известно, оба
проекта позволяют включать исходный код SQLite как
объединение SQLite. Это должно упростить процесс
создания пакета Python.
 
С уважением,
 
Ульрих.
Ulrich Telle автор wxSQLite3 реализовал APSW kst 20/06/2024 19:21 #написать ответ
Ulrich Telle
 
На сегодняшний день доступна поддержка Python:
 
https://pypi.org/project/apsw-sqlite3mc/
 
https://github.com/utelle/apsw -sqlite3mc
 
С уважением,
 
Ульрих
 
Сам еще не пробовал. Может кому еще пригодится
con.pragma("key", "my secret passphrase"). Что за параметр "key"? kst 20/06/2024 19:49 #написать ответ
Попробовал подключиться к БД. Автор пишет подключаться так:
>>> import apsw
>>> print(apsw.mc_version)
SQLite3 Multiple Ciphers 1.8.6
>>> con = apsw.Connection("database.sqlite3")
>>> con.pragma("key", "my secret passphrase")
ok
 
не пойму что нужно писать в параметре "key" в con.pragma("key", "my secret passphrase"). "my secret passphrase" - заменил на пароль из AbilityCash. Без "key" как-то не работает. Запрос на вывод списка всех таблиц возвращает пустым.
РАБОТАЕТ!!! Получил доступ к шифрованной БД AbilityCash из Python kst 22/06/2024 11:20 #написать ответ
Может кому пригодиться. Вот минимальный рабочий код:
 
import apsw
 
print(apsw.mc_version)
 
con = apsw.Connection("base.cash")
con.pragma("cipher", "aes256cbc")
print(con.pragma("key", "DB_PASSWORD"))
 

print(f"Database Connection: {con.total_changes}")
 
cursor = con.cursor()
print(f'{cursor=}')
 
# Запрос для получения списка таблиц
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
 
# Получение результатов
tables = cursor.fetchall()
print(f'{tables=}')
 
# Вывод списка таблиц
print("List of tables in the database:")
for table in tables:
    print(table[0])
 

con.close()
Структура БД AbilityCash kst 22/06/2024 11:24 #написать ответ
А нет ли какого-то документа со структурой БД AbilityCash? Из Python запросами - не очень понятно что за таблицы и для чего нужны. Или может попадался какой-то менеджер баз данных навроде SQLiteStudio, но с доступом к шифрованной БД? Чтоб более наглядно увидеть таблицы и их содержимое? Пытался из PyCharm, но не разобрался как встроенным менеджером увидеть БД.
 
Спасибо!