.execute ("INSERT дает OperationalError: невозможно открыть файл базы данных - PullRequest
0 голосов
/ 06 апреля 2019

Итак, я создаю менеджер паролей и по какой-то причине, когда я использую классы, я не могу вводить какие-либо данные в свою базу данных при использовании SQL. (Примечание: при использовании tkinter я все еще могу использовать SQL для ввода кода в свою базу данных)

Я уже подключился к базе данных таким же образом, как и для остальной части моего кода

класс dataentry ():

 def __init__(self,master):

      conn = sqlite3.connect('passworddatabase.db')
      cursor = conn.cursor()
      cursor.execute('CREATE TABLE IF NOT EXISTS passwords(username STRING,password STRING,portal_name STRING)') #creates tables to be used, incase it does not exist

      self.username=StringVar() #creates tkinter variable, and validates contents of what will be entered
      self.password=StringVar() #""
      self.portal_name=StringVar() #""

      self.master=master
      self.master.geometry('400x200+100+200') #geometry
      self.master.title('Password Manager') #window title

      self.label2=Label(self.master,text='Add New Details', fg='white', bg='black').grid(row=0,column=0)
      self.label2=Label(self.master,text='Username',fg='black').grid(row=3,column=0)
      self.label2=Label(self.master,text='Password',fg='black').grid(row=4,column=0)
      self.label2=Label(self.master,text='Application Name',fg='black').grid(row=5,column=0)

      self.username=Entry(self.master,textvariable=self.username).grid(row=3,column=1)
      self.password=Entry(self.master,textvariable=self.password,show="*").grid(row=4,column=1) #hides password enteries
      self.portal_name=Entry(self.master,textvariable=self.portal_name).grid(row=5,column=1)
      self.button4=Button(self.master,text="Add Details",fg='white', bg='black', command=self.dynamic_data_entry).grid(row=10,column=1) #add's field enteries to database
      self.button5=Button(self.master,text="Return to Home Page",fg='white', bg='black',command=self.exit).grid(row=12,column=1) #exit button

код выше должен был дать подпрограмме ниже (ответственной за добавление данных) некоторый контекст

 def dynamic_data_entry(self):
      global dynamic_data_entry #access within the entire program
    #this is what adds the data to the database
      global conn, cursor
      conn = sqlite3.connect('passworddatabase.db')
      c = conn.cursor()
      username1 = self.username #assigning variables
      password1 = self.password #""
      portal_name1 = self.portal_name #
      c.execute("INSERT INTO passwords(username, password, portal_name) VALUES (?, ?, ?)",(username1, password1, portal_name1)) #enters data into the table
      conn.commit()
      self.writetodatabase() 

 def writetodatabase(self):
      for i in range(1):
           time.sleep(1)
      c.close()
      conn.close()     

Я ожидал, что данные будут добавлены в таблицу паролей «пароли», а не с ошибками. Примечательно, что база данных «только для чтения»

обновление: трассировка больше не сообщает о проблеме с базой данных только для чтения, но сообщает об этом:

Traceback (most recent call last):
  File "C:\Users\owner\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1702, in __call__
    return self.func(*args)
  File "C:\Users\owner\Documents\A-Levels\Subjects\Comp.science\nea\code\loginnew.py", line 80, in dynamic_data_entry
    cursor.execute("INSERT INTO passwords(username, password, portal_name) VALUES (?, ?, ?)",(username1, password1, portal_name1)) #enters data into the table
sqlite3.OperationalError: unable to open database file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...