作者:mobiledu2502859507 | 来源:互联网 | 2023-01-01 18:29
我对编程很新.我之前尝试过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 \`代码,并解释为什么所讨论的代码回答了问题/完成了所要求的工作。