热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《ProgrammingError:在线程中创建的SQLite对象只能在同一个线程中使用》经验,为你挑选了3个好方法。

我对编程很新.我之前尝试过MySQL,但现在我第一次在python烧瓶网站上使用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文件中使用名称,电子邮件用户名和密码?我该如何解决这个问题?

谢谢.



1> 小智..:

在与数据库建立连接的位置添加以下内容.

cOnn= sqlite3.connect('your.db', check_same_thread=False)


这样安全吗?
这个主题的未来读者的一些额外信息.按https://docs.python.org/3/library/sqlite3.html:默认情况下,check_same_thread为True,只有创建的线程可以使用该连接.如果设置为False,则可以跨多个线程共享返回的连接.当使用具有相同连接的多个线程时,应由用户序列化写操作以避免数据损坏.

2> ndrix..:

你的光标'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"


我遇到了这个。我正在通过一个似乎有一些python2东西的udacity全栈开发课程。因此,实际上这是一个很好的学习机会。无论哪种方式对我都有效。我在app.py文件的顶部放置了以下内容,然后从字面上复制并粘贴到了该函数(路径)中,瞧,问题解决了。Python DBSession = sessionmaker(bind = engine)会话= DBSession()

3> 小智..:
engine = create_engine(
'sqlite:///restaurantmenu.db',
connect_args={'check_same_thread': False}
)

为我工作


嗨,JJ,欢迎来到Stack Overflow!请您改善这个答案?使用单反引号\\来显示这样的\\ code \`代码,并解释为什么所讨论的代码回答了问题/完成了所要求的工作。
推荐阅读
author-avatar
mobiledu2502859507
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有