Подтвердить что ты не робот

Jenkins Job - DatabaseError: файл зашифрован или не является базой данных

При запуске этого кода для подключения к db через cmd - локально и на самом сервере работает нормально. Но я установил его на 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()
4b9b3361

Ответ 1

Версия python sqlite3 и командной строки sqlite3 может быть разной. Создайте свою базу данных из сценария, то есть код инициализации БД в скрипте, а не из CMD, и он может решить проблему.

Ответ 2

Каково значение * args?? он имеет те же самые значения, которые у вас есть, когда вы запускаете его на cmd и через jenkins, вы проверяли путь и расположение базы данных, связанной с местоположением jenkins?

Ответ 3

Это, скорее всего, несоответствие версии между SQLite CLI, которую вы используете, и тот, который связан с Python. Вы можете иметь такое несоответствие на том же сервере. Разумеется, вы можете использовать Python вместо SQLite CLI для создания своей базы данных на сервере - при условии, что у вас есть вся ваша структура инициализации SQLite в path/to/your_sql.sql вы можете инициализировать path/to/your_database.db данных 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.