运行此代码以通过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()
答案 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工作中加载该数据库。