使用SQLITE/PYTHON插入用户和密码
使用具有用户和密码的组程序。我们正试图通过python将用户和密码插入sqlite。但是在我们的图形窗口弹出一个应该发送数据的按钮之前,我们只发送空白数据。我们尝试了在多个网站上发现的不同变体,但似乎没有任何效果使用SQLITE/PYTHON插入用户和密码,python,sqlite,tkinter,Python,Sqlite,Tkinter,使用具有用户和密码的组程序。我们正试图通过python将用户和密码插入sqlite。但是在我们的图形窗口弹出一个应该发送数据的按钮之前,我们只发送空白数据。我们尝试了在多个网站上发现的不同变体,但似乎没有任何效果 from tkinter import * import sqlite3 import sys conn = sqlite3.connect('indexCards.db') cur = conn.cursor() users ={} def addUser(entUsern
from tkinter import *
import sqlite3
import sys
conn = sqlite3.connect('indexCards.db')
cur = conn.cursor()
users ={}
def addUser(entUsername, entPassword):
#global entUsername, entPassword
NAME = entUsername.get()
PASSWORD = entPassword.get()
print("add User") #this is testing only
print(NAME, PASSWORD) # this is testing to see the passed variable
//
//This is where we are having the issues
conn.executemany('INSERT INTO USER(NAME,PASSWORD)\
VALUES (? ,?);', [(NAME,PASSWORD)])
conn.commit();
return (NAME, PASSWORD)
def makeWindow():
global entUsername, entPassword
window = Tk()
window.title('Add New User')
lblInst = Label(window, text = "Create your account here:", font=("Helvetica",16))
lblInst.pack()
lblUsername = Label(window, text="Please enter a username: ")
entUsername = Entry(window)
lblUsername.pack()
entUsername.pack()
lblPassword = Label(window, text="Please enter a password: ")
entPassword = Entry(window)
lblPassword.pack()
entPassword.pack()
btn = Button(window, text="Create", command=addUser(entUsername, entPassword))
btn.pack()
print (addUser(entUsername, entPassword))
print('entUsername', 'entPassword')
#window.mainloop()
return window
#if __name__ == '__main__':
# main():
window = makeWindow()
window.mainloop()
问题是,在用户有机会输入任何数据之前,您正在立即调用该函数
请参见它立即调用该方法而按下按钮不起任何作用的原因是addUser(entUsername,entPassword)被计算,其返回值作为按钮的命令。因此,如果addUser打印一些内容来告诉您它已运行,但未返回任何内容,则只需运行addUser来评估其返回值,并将None作为按钮的命令。
要使用按钮调用具有不同参数的函数,您可以使用全局变量,尽管我不建议这样做:
import sqlite3
from tkinter import *
conn = sqlite3.connect('indexCards.db')
cur = conn.cursor()
users = {}
cur = conn.cursor()
cur.execute('''
Create table if not exists USER(NAME varchar(100), PASSWORD varchar(100))
''')
def addUser():
NAME = entUsername.get()
PASSWORD = entPassword.get()
print("add User") # this is testing only
print(NAME, PASSWORD) # this is testing to see the passed variable
# This is where we are having the issues
conn.executemany('INSERT INTO USER(NAME,PASSWORD) VALUES (? ,?);', [(NAME, PASSWORD)])
conn.commit()
return (NAME, PASSWORD)
def makeWindow():
global entUsername
global entPassword
window = Tk()
window.title('Add New User')
lblInst = Label(window, text="Create your account here:", font=("Helvetica", 16))
lblInst.pack()
lblUsername = Label(window, text="Please enter a username: ")
entUsername = Entry(window)
lblUsername.pack()
entUsername.pack()
lblPassword = Label(window, text="Please enter a password: ")
entPassword = Entry(window)
lblPassword.pack()
entPassword.pack()
btn = Button(window, text="Create", command=addUser)
btn.pack()
print(addUser())
window.mainloop()
return window
window = makeWindow()
如果不想创建全局函数,则可以将带有多个参数的函数传递给匿名函数,即lambda函数
btn = Button(window, text="Create", command= lambda : addUser(entUsername, entPassword))
conn.executemany('INSERT-INTO-USER(NAME,PASSWORD)\\值(?,;,[(NAME,PASSWORD)])
->conn.executemany('INSERT-INTO-USER(NAME,PASSWORD)值(?,;,(NAME,PASSWORD))
。但你们真的要把纯文本密码存储到数据库中吗?这个程序其实并不需要安全性,因为它只是一个类。我们真的不需要用户和密码,我只需要能够将信息发送到sql数据库而不需要为空。非常感谢您提供链接,我们能够修复我们的程序@亚伦:如果你觉得这很有帮助,请阅读《欢迎来到堆栈溢出》。没有任何解释的代码转储很少有帮助。堆栈溢出是关于学习,而不是提供盲目复制和粘贴的代码片段。请回答您的问题,并解释它如何比OP提供的更好地工作。