【问题标题】:Jenkins Job - DatabaseError: file is encrypted or is not a databaseJenkins Job - DatabaseError:文件已加密或不是数据库
【发布时间】:2018-09-08 07:58:41
【问题描述】:

当运行此代码以通过 cmd 连接到数据库时 - 在本地和实际服务器上它工作正常。但我已经在 J​​enkins 上设置它并收到错误:

DatabaseError: file is encrypted or is not a database

似乎发生在这一行:

  self.cursor.execute(*args)

数据库类是:

class DatabaseManager(object):
    def __init__(self, db):
        self.conn = sqlite3.connect(db)
        self.cursor = self.conn.cursor()

    def query(self, *args):
        self.cursor.execute(*args)
        self.conn.commit()
        return self.cursor

    def __del__(self):
        self.conn.close()

【问题讨论】:

  • 您是否使用了 db 文件的绝对路径? Jenkins 用户是否拥有对 db 文件的写入权限?

标签: python jenkins sqlite


【解决方案1】:

这很可能是您使用的 SQLite CLI 与 Python 捆绑的版本不匹配。您也可以在同一台服务器上出现这种不匹配。可以肯定的是,您可以使用 Python 而不是 SQLite CLI 在服务器上创建数据库 - 如果您在 path/to/your_sql.sql 中拥有所有 SQLite 初始化结构,您可以使用如下脚本初始化 path/to/your_database.db 数据库:

import sqlite3

connection = sqlite3.connect("path/to/your_database.db")
cursor = connection.cursor()
with open("path/to/your_sql.sql", "r") as f:
    cursor.execute(f.read())
connection.commit()

然后尝试从您的 Jenkins 作业中加载该数据库。

【讨论】:

    【解决方案2】:

    *args 的值是多少??它是否具有与您在 cmd 和通过 jenkins 上运行它时相同的值,您是否检查了与 jenkins 位置相关的 DB 的路径和位置??

    【讨论】:

      【解决方案3】:

      python sqlite3 和命令行 sqlite3 的版本可以不同。从脚本创建数据库,即在脚本中而不是从 CMD 中编写数据库初始化代码,它可能会解决问题。

      【讨论】:

      • 我在同一台服务器上创建了数据库,但仍然无法正常工作
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多