Ошибка Python sqlite: ValueError: параметр базы данных должен быть string или APSW Connection object

Я пытаюсь создавать, редактировать и читать из файла sqlite с помощью скрипта python. Мой код-это модель клиента сервера с записью клиента в базу данных при получении команды от сервера.

Каждая команда с сервера принимается в отдельном потоке для обеспечения параллельной работы.

Клиент никогда не перезагружается, если система не перезагружается, но программа сервера запускается, когда это необходимо пользователю.

Теперь моя проблема возникает, потому что sqlite для python не является потокобезопасным. Таким образом, у меня есть потребительская очередь к базе данных для всех операций записи.

Я не могу предоставить код, потому что он действительно длинный и очень har, чтобы отделить и предоставить полную рабочую копию.

Но фрагмент кода, где ошибка :

def writedata(self, _arg1, _arg2, _arg3):      
     # self.sql_report is the fully qualified path of sqlite file
    db = sqlite3.connect(self.sql_report)
    c = db.cursor()  
    res = c.execute("Select id from State")
    listRowId = []
    for element in res.fetchall():
        listRowId.append(element[0])
    self.currentState = max(listRowId)  

    sql = "INSERT INTO Analysis (type, reason, Component_id, State_id) VALUES (?, ?, ifnull((SELECT id from `Component` WHERE name = ? LIMIT 1), 1), ?)"
    # call to the write queue.

    Report.strReference.writeToDb(sql, [(_arg1, _arg3, _arg2, self.currentState)])

Ошибка, которую я получаю

File "/usr/lib/python2.6/threading.py", line 525, in __bootstrap_inner
self.run()
File "/usr/lib/python2.6/threading.py", line 477, in run
self.__target(*self.__args, **self.__kwargs)
File "/nameoffile", line 357, in nameofmethod
Report().writedata("test","text","analysis")
File "./nameofscript/Report.py", line 81, in writedata
ValueError: database parameter must be string or APSW Connection object

строка 81: вот:

 #first line of the snippet code pasted above
 db = sqlite3.connect(self.sql_report)

Я не знаю, почему эта ошибка возникает. Однако следует отметить, что эта ошибка возникает только после запуска сервера несколько раз.

1 ответ

  1. Ошибка именно в том, что он говорит. Вы передаете self.sql_reportимя файла базы данных в виде строки для использования, но в момент вызова это не строка.

    Вам нужно будет узнать, что это на самом деле, что является стандартной отладкой Python. Используйте то, что вы обычно используете для этого. Вот также предложение, которое будет печатать то, что это и падение в интерактивный отладчик, так что вы можете изучить дальше.


    try:
    db = sqlite3.connect(self.sql_report)
    except ValueError:
    print (repr(self.sql_report))
    import pdb; pdb.set_trace()
    raise