Итак, я создаю менеджер паролей и по какой-то причине, когда я использую классы, я не могу вводить какие-либо данные в свою базу данных при использовании 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