Jenkins Job - DatabaseError:文件已加密或不是数据库

时间:2018-03-29 11:18:09

标签: python jenkins sqlite

运行此代码以通过cmd连接到db时 - 在本地和实际服务器上运行正常。但我已经在Jenkins上设置了它并收到错误:

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()

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

它很可能是您正在使用的SQLite CLI与Python捆绑的版本之间的版本不匹配。您也可以在同一台服务器上进行此类不匹配。可以肯定的是,您可以使用Python而不是SQLite CLI在服务器上创建数据库 - 只要您在path/to/your_sql.sql中拥有所有SQLite init结构,就可以使用以下脚本初始化path/to/your_database.db数据库: / p>

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工作中加载该数据库。