首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >第一个水瓶项目-数据库文件不会更新

第一个水瓶项目-数据库文件不会更新
EN

Stack Overflow用户
提问于 2020-12-18 21:03:12
回答 2查看 58关注 0票数 2

我最近开始学习Flask,下面的教程要求我使用sqlite3作为数据库来存储用户名、密码和待办事项列表本身,来设置一个待办事项列表应用程序。到目前为止,我的模式和模型的设置与教程完全一样,但我的数据库文件没有更新。我的表显示在数据库文件中,但它们是空的。我做错了什么?

这是一个模式:

代码语言:javascript
复制
import sqlite3

connection = sqlite3.connect('to_do_list.db', check_same_thread = False)
cursor = connection.cursor()

cursor.execute(
    """CREATE TABLE users(
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        username VARCHAR(32),
        password VARCHAR(32)    
    );"""
)

connection.commit()
cursor.close()
connection.close()

以下是注册模式:

代码语言:javascript
复制
def signup(username, password):
connection = sqlite3.connect('to_do_list.db', check_same_thread = False)
    cursor = connection.cursor()
    cursor.execute( """SELECT password FROM users WHERE username = '{username}';""".format(username = username))
    exist = cursor.fetchone()

    if exist is None:
        cursor.execute("""INSERT INTO users(username, password)VALUES('{username}', '{password}');""".format(username = username, password = password))            
            
        connection.commit()
        cursor.close()
        connection.close()

    else:
        return ('User already exists!')

下面是烧瓶的路由:

代码语言:javascript
复制
@app.route('/signup', methods = ['GET', 'POST'])
def signup():
    if request.method == 'GET':
        message = 'Please sign up!'
        return render_template('signup.html', message = message)
    else:
        username = request.form['username']
        password = request.form['password']
        return render_template('todo.html')
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-19 09:14:35

我决定睡在上面,想出了解决办法。本教程不清楚其中的一些功能,约翰·戈登的上述评论帮助我弄清楚了这一点。我不得不在路由函数中调用模型代码。我还必须“导入模型”,因为我的模型位于不同的.py文件中。

新的路由:

代码语言:javascript
复制
@app.route('/signup', methods = ['GET', 'POST'])
def signup():
    if request.method == 'GET':
        message = 'Please sign up!'
        return render_template('signup.html', message = message)
    else:
        username = request.form['username']
        password = request.form['password']
        db = model.signup(username, password)
        return render_template('todo.html')

谢谢大家的投入!身体健康,安全,节日快乐。

票数 2
EN

Stack Overflow用户

发布于 2020-12-18 21:07:44

这里

代码语言:javascript
复制
import sqlite3

connection = sqlite3.connect('to_do_list.db', check_same_thread = False)
curr = connection.cursor()

curr.execute(
    """CREATE TABLE users(
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        username VARCHAR(32),
        password VARCHAR(32)    
    );"""
)

curr.commit()
curr.close()

您要将commit()函数添加到connection变量,而不是添加到游标中。

编辑,在这里:

代码语言:javascript
复制
def signup(username, password):
connection = sqlite3.connect('to_do_list.db', check_same_thread = False)
    curr= connection.cursor()
    curr.execute( """SELECT password FROM users WHERE username = '{username}';""".format(username = username))
    exist = curr.fetchone()

if exist is None:
    curr.execute("""INSERT INTO users(username, password)VALUES('{username}', '{password}');""".format(username = username, password = password))            
        
    curr.commit()
    curr.close()
    curr.close()

else:
    return ('User already exists!')

如果已经创建了一个重要,那么在编辑脚本之后,请记住删除文件,这样它就会创建一个新的文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65363886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档