Ответ 1
Версия python sqlite3 и командной строки sqlite3 может быть разной. Создайте свою базу данных из сценария, то есть код инициализации БД в скрипте, а не из CMD, и он может решить проблему.
При запуске этого кода для подключения к 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()
Версия python sqlite3 и командной строки sqlite3 может быть разной. Создайте свою базу данных из сценария, то есть код инициализации БД в скрипте, а не из CMD, и он может решить проблему.
Каково значение * args?? он имеет те же самые значения, которые у вас есть, когда вы запускаете его на cmd и через jenkins, вы проверяли путь и расположение базы данных, связанной с местоположением jenkins?
Это, скорее всего, несоответствие версии между 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.