ProgrammingError:在线程中创建的SQLite对象只能在同一线程中使用

发布于 2021-01-29 18:40:38

我是编程新手。我以前尝试过MySQL,但现在是我第一次在python
flask网站上使用SQLite。因此,也许我使用的是MySQL语法而不是SQLite,但似乎找不到问题。

Piece of my code:

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegisterForm(request.form)
    if request.method=='POST' and form.validate():
        name =  form.name.data 
        email = form.email.data
        username = form.username.data
        password = sha256_crypt.encrypt(str(form.password.data))

        c.execute("INSERT INTO users(name,email,username,password) 
        VALUES(?,?,?,?)", (name, email, username, password))

        conn.commit

        conn.close()

The error:
 File "C:\Users\app.py", line 59, in register c.execute("INSERT INTO users(name,email,username,password) VALUES(?,?,?,?)", (name, email, username, password))
 ProgrammingError: SQLite objects created in a thread can only be used in that 
 same thread.The object was created in thread id 23508 and this is thread id 
 22640

这是否意味着我不能在HTML文件中使用名称,电子邮件用户名和密码?我该如何解决?

谢谢。

关注者
0
被浏览
167
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您的游标“ c”不在同一线程中创建;它可能是在Flask应用运行时初始化的。

    您可能希望使用相同的方法生成SQLite对象(连接和游标),例如:

      @app.route('/')
      def dostuff():
        with sql.connect("database.db") as con:
          name = "bob"
          cur = con.cursor()
          cur.execute("INSERT INTO students (name) VALUES (?)",(name))
          con.commit()
          msg = "Done"
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看