Как подключиться к защищенной базе данных 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