1. ホーム
  2. python

[解決済み] ProgrammingError: スレッドで作成されたSQLiteオブジェクトは、その同じスレッドでのみ使用することができます。

2022-02-09 16:43:25

質問事項

私はプログラミングの初心者です。MySQLは以前試したことがありますが、Python FlaskのウェブサイトでSQLiteを使うのは初めてです。 多分、私はSQLiteの代わりにMySQLの構文を使用しているのでしょうが、問題を見つけることができないようです。

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ファイルで名前、メールユーザー名&パスワードが使えないということでしょうか? どうすれば解決できますか?

ありがとうございました。

解決方法は?

カーソル 'c' は同じスレッドで作成されていません。Flask アプリの実行時に初期化された可能性があります。

おそらく、同じメソッドでSQLiteオブジェクト(conneciton、およびcursor)を生成したいのでしょう。

  @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"