首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python连接到受保护的Sqlite3数据库

如何使用Python连接到受保护的Sqlite3数据库
EN

Stack Overflow用户
提问于 2018-05-17 00:12:44
回答 2查看 15.8K关注 0票数 1

我创建了一个SQLite3数据库并使用密码("test")来保护它,这要归功于应用程序DB browser for SQLite。为了通过Python连接到我的数据库,我需要提供密码,但我想不出怎么做。我尝试了以下代码:

代码语言:javascript
复制
conn=sqlite3.connect("mydatabase.db", Password="test")
cur=conn.cursor()

编辑:

我的SQLite3数据库已经用SQLCipher加密了(参见图像)。

如果运行以下代码:

代码语言:javascript
复制
conn=sqlite3.connect("mydatabase.db")
cur=conn.cursor()

我知道这个错误:

代码语言:javascript
复制
sqlite3.DatabaseError: file is encrypted or is not a database

如何传递密码才能通过Python与我的db连接?

编辑2

这里简要总结一下我所努力达到的目标。我正在用Python 3开发一个应用程序,它需要一个预先填充的数据库,但是这个数据库需要一个密码来保护。经过广泛的研究,通过SQLite3连接加密的Python 3数据库似乎很复杂。库调用pysqlcipher是存在的,但只适用于Python2.7。我的下一个问题可能过于宽泛,我提前道歉。是否存在另一个可移植数据库,允许我使用密码保护它,并且仍然可以访问Python?为了解决问题,我想到的另一个想法是使用zipfile库。这个链接提到zipfile模块不支持加密,但不清楚加密是指SQLite3数据库还是指zip文件。这样做的想法是将我的不受保护的DB压缩到一个受保护的zip文件中,因为我似乎可以这样做(链接)。这个编辑的目的是获得关于如何解决我的问题的新想法。谢谢

EN

回答 2

Stack Overflow用户

发布于 2018-05-17 01:25:07

您需要SQLCipher模块来读取该数据库。默认的SQLite3模块对此不支持。请参阅https://github.com/sqlitebrowser/sqlitebrowser/wiki/Encrypted-Databases

票数 3
EN

Stack Overflow用户

发布于 2018-12-09 18:14:38

如果您的数据库是用SqlCipher加密的,则需要在SO:下载中安装sqlcipher

Linux:sudo pacman -S sqlcipher

代码语言:javascript
复制
sudo apt-get install sqlcipher

在您需要pysqlcipher3 lib:pip install pysqlcipher3之后

请参阅:https://github.com/rigglemania/pysqlcipher3

我的示例代码是:

代码语言:javascript
复制
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()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50381616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档