Как подключиться к защищенной базе данных Sqlite3 с помощью Python

Я создал SQLite3 базы данных и защищен паролем ("тест") благодаря приложению DB browser for SQLite, Для того, чтобы подключиться к моей базе данных через PythonМне нужно предоставить пароль, но я не могу понять, как это сделать. Я попробовал следующий код:

conn=sqlite3.connect("mydatabase.db", Password="test")
cur=conn.cursor()

РЕДАКТИРОВАТЬ:

мой SQLite3 база данных была зашифрована с SQLCipher (см. изображение). Если я запускаю следующий код:

conn=sqlite3.connect("mydatabase.db")
cur=conn.cursor()

Я получаю эту ошибку:

sqlite3.DatabaseError: file is encrypted or is not a database

Как я могу передать пароль, чтобы связаться с моим db через питон?

РЕДАКТИРОВАТЬ 2

Вот краткое изложение того, чего я пытаюсь достичь. Я разрабатываю приложение с Python 3 требуется предварительно заполненная база данных, но эта база данных должна быть защищена паролем. После обширных исследований кажется сложным подключить зашифрованные SQLite3 база данных через Python 3, Библиотека звонков pysqlcipher существует, но только для Python 2.7. Мой следующий вопрос будет, возможно, слишком широким, и я заранее извиняюсь. Существует ли еще одна переносимая база данных, позволяющая мне защитить ее паролем и при этом получить доступ к Python? Другая идея, которую я имею в виду, чтобы решить мою проблему, заключается в использовании zipfile библиотека. Эта ссылка упоминает, что zipfile Модуль не поддерживает шифрование, но не ясно, относится ли шифрование к SQLite3 базы данных или в ZIP-файл. Идея была бы застегнуть молнию на моем незащищенном DB в защищенный почтовый файл, как кажется, я могу это сделать ( ссылка). Цель этого редактирования - получить новые идеи о том, как решить мою проблему. Спасибо

1 ответ

Если ваша база данных зашифрована с помощью SqlCipher, вам необходимо установить sqlcipher в вашей ОС Windows: Загрузить

Linux: sudo pacman -S sqlcipher или же

sudo apt-get install sqlcipher

После того, как вам нужна библиотека pysqlcipher3: pip install pysqlcipher3

Смотрите: https://github.com/rigglemania/pysqlcipher3

мой пример кода:

from pysqlcipher3 import dbapi2 as sqlite3


class Database(object):
    def __init__(self, dbname):
        self.dbname = dbname

    def connDB(self):
        self.conn = sqlite3.connect(self.dbname)
        self.cursor = self.conn.cursor()
        self.cursor.execute("PRAGMA key='mypassword'")

    def createDB(self):
        self.connDB()
        self.cursor.execute(
            '''
            CREATE TABLE IF NOT EXISTS users (
            id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
            name TEXT NOT NULL,
            login TEXT NOT NULL,
            passwd TEXT);
            '''
        )

        self.cursor.execute(
            '''
            INSERT INTO users (name, login, passwd)
            VALUES ("Admininstrator", "admin", "12345")
            '''
        )
        self.conn.commit()
        self.conn.close()

    def queryDB(self, sql):
        self.connDB()
        self.cursor.execute(sql)

        if sql[0:6].lower() == 'select':
            result = self.cursor.fetchall()
            self.conn.close()
            return result
        else:
            self.conn.commit()
            self.conn.close()

Вам нужен модуль SQLCipher для чтения этой базы данных. Модуль SQLite3 по умолчанию не поддерживает это. См. https://github.com/sqlitebrowser/sqlitebrowser/wiki/Encrypted-Databases

Другие вопросы по тегам