我正在为学校做一个简单的系统来执行家庭作业,用户在其中登录并输入密码以使用太多功能。我创建了一个按钮,该按钮打开了一个窗口以注册新用户,我可以注册没有问题,已经在数据库中检查了,那里有新用户。但是有必要进行处理,以使该人不会使用相同的登录名创建帐户
我遵循SQLITE(http://www.sqlitetutorial.net/sqlite-python/sqlite-python-select/)文档的说明 这是
1。首先,通过创建Connection对象建立与SQLite数据库的连接。
2。接下来,使用Connection对象的cursor方法创建一个Cursor对象。
3。然后,执行SELECT语句。
4。之后,调用游标对象的fetchall()方法以获取数据。
5。最后,循环游标并分别处理每一行。
这是我的文件Tela.py和BancoLogin.py:
(Tela.py)
from tkinter import *
from tkinter import messagebox as ms
import sqlite3
from BancoLogin import BancoLogin
(...)other defs(...)
def new_user(self):
#Establish Connection
bancoLogin = BancoLogin()
c = bancoLogin.conexao.cursor()
#Find Existing username if any take proper action
find_user = ('SELECT * FROM user WHERE username = ?')
c.execute(find_user,[(self.username.get())])
rows = c.fetchall()
print(rows)
if c.fetchall():
ms.showerror('Error!', 'Username taken - try a different one.')
else:
ms.showinfo('Success!', 'Account Created!')
self.log()
#Create New Account
insert = 'INSERT INTO user(username,password) VALUES(?,?)'
c.execute(insert,[(self.n_username.get()),(self.n_password.get())])
bancoLogin.conexao.commit()
我的数据库在另一个文件中(BancoLogin.py):
import sqlite3
class BancoLogin():
def __init__(self):
self.conexao = sqlite3.connect('bancoLogin.db')
self.createTable()
def createTable(self):
c = self.conexao.cursor()
c.execute('CREATE TABLE IF NOT EXISTS user(username TEXT NOT NULL, password TEX NOT NULL);')
self.conexao.commit()
c.close()
我意识到出了点问题,因为当我这样做时:
rows = c.fetchall()
print(rows)
在shell中,我收到:
[]