Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQlite3未插入行_Python_Sqlite_Oop - Fatal编程技术网

Python SQlite3未插入行

Python SQlite3未插入行,python,sqlite,oop,Python,Sqlite,Oop,确切地说,我正在创建一个登录和注册程序,目前我在按用户名和密码输入的给定值插入一行时遇到了一些问题 我有两个python文件,一个是Main.py,第二个是functions.py,这显然是我程序的函数和类 Pycharm不会抛出错误,所以我想问我的代码出了什么问题?为什么不插入一行 Main.py 函数.py 这个类将接受main.py中给定的用户名和密码值 这就是创建表的地方 c = sqlite3.connect('registration.db') c.execute('''CREAT

确切地说,我正在创建一个登录和注册程序,目前我在按用户名和密码输入的给定值插入一行时遇到了一些问题

我有两个python文件,一个是Main.py,第二个是functions.py,这显然是我程序的函数和类

Pycharm不会抛出错误,所以我想问我的代码出了什么问题?为什么不插入一行

Main.py

函数.py

这个类将接受main.py中给定的用户名和密码值

这就是创建表的地方

c = sqlite3.connect('registration.db')

c.execute('''CREATE TABLE IF NOT EXISTS info (username     TEXT    NOT NULL, password      TEXT    NOT NULL);''')


对于使用python的SQLite,您需要创建一个游标

表格创建:

导入sqlite3 conn=sqlite3.connect('registration.db') c=连接光标() c、 执行('CREATE TABLE IF NOT EXISTS info(用户名文本不为空,密码文本不为空)' 康涅狄格州提交 c、 关闭()
main.py

username=input(“用户名:”)
密码=输入(“密码:”)
user1=注册(用户名、密码)
user1.signu()
打印(“完成!”)
function.py

导入sqlite3 conn=sqlite3.connect('registration.db') c=连接光标() 注册类别: 定义初始化(self、用户名、密码): self.username=用户名 self.password=密码 def签名(自我): c、 执行(f'INSERT INTO info(username,password)值(“self.username}”,“{self.password}”)) 康涅狄格州提交 c、 关闭()
您永远不会调用执行
INSERT
查询的方法

您需要创建一个游标来执行查询


c = sqlite3.connect('main.db')
class SignUp:
    def __init__(self, username, password):
        self.username = username
        self.password = password

    def signu(self):
        cur = c.cursor()
        cur.execute(f'''INSERT INTO info (username, password) VALUES (?, ?); ''', (self.username, self.password))
        c.commit()

username = input("Username: ")
password = input("Password: ")

s = Signup(username, password)
s.signu()

print("Done!")

从不调用
signu()
不要将变量直接替换到SQL字符串中。在查询中使用占位符,并将参数参数参数设置为
cursor.execute()
while
循环总是中断的目的是什么,在s variable中,我实际上在while循环中添加了一个条件语句,它将检查给定的用户名是否已经在表中,如果已经在表中,那么它将调用continue syntax。如果这是答案,请单击复选标记谢谢,它可以工作。我只是忘了创建一个游标。问题不是他忘了调用这个方法(他在main.py中调用它)。问题是他没有创建游标。也不要在signu中创建游标(如果多次调用signu,将创建多个游标),他在
main.py
中在哪里调用它?我只看到
s(用户名、密码)
好的一点:),仍然可以很好地谈论光标(不仅仅是添加行)
c = sqlite3.connect('registration.db')

c.execute('''CREATE TABLE IF NOT EXISTS info (username     TEXT    NOT NULL, password      TEXT    NOT NULL);''')


c = sqlite3.connect('main.db')
class SignUp:
    def __init__(self, username, password):
        self.username = username
        self.password = password

    def signu(self):
        cur = c.cursor()
        cur.execute(f'''INSERT INTO info (username, password) VALUES (?, ?); ''', (self.username, self.password))
        c.commit()

username = input("Username: ")
password = input("Password: ")

s = Signup(username, password)
s.signu()

print("Done!")