Использование fetchone в запросе выбора в Python 3, синтаксическая путаница - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь настроить функцию регистрации на моем сайте, и я застрял в настройке логики для запросов к базе данных, чтобы увидеть, существует ли имя пользователя.Если это произойдет, он должен вернуть страницу с извинениями.

Это мой код:

@app.route("/register", methods=["GET", "POST"])
def register():
    """Register user"""

    # User reached route via POST (as by submitting a form via POST)
    if request.method == "POST":

        # Stored POST data to variables
        username = request.form.get('username')
        password = request.form.get('password')
        confirmation = request.form.get('confirmation')

        # Ensure username was submitted
        if not username:
           return apology("must provide username", 403)

        # Ensure password and confirmation were both submitted
        elif not password:
            return apology("must provide password in both fields", 403)

        # Ensure passwords match
        elif confirmation != password:
            return apology("passwords do not match", 403)

        elif db.execute('SELECT id FROM users WHERE username = ?', 
        (username,)).fetchone()  is not None:
            return apology("Username already exists", 403)

Я получаю эту ошибку:

elif db.execute('SELECT id FROM users WHERE username = ?', 
(username,)).fetchone()  is not None:
TypeError: execute() takes 2 positional arguments but 3 were given

Я видел код, гдеСначала они используют метод cursor (), но я думал, что метод execute () делает это в Python 3?Не могли бы вы помочь с моим запросом к базе данных, спасибо.

1 Ответ

0 голосов
/ 21 сентября 2018

Я понял, что проблема связана с моим подключением к БД.поэтому синтаксис .execute () отличается от стандартной документации.

Я изменил следующее:

from cs50 import SQL; and
db = SQL("sqlite:///finance.db")

на:

import sqlite3; and
db = sqlite3.connect('finance.db')

Надеюсь, это поможет кому-то еще в мире сделать тот же набор параметров и не желать использоватьсокращенная библиотека CS50.Синтаксис моего оператора запроса выше был правильным.

    elif db.execute('SELECT id FROM users WHERE username = ?', 
    (username,)).fetchone()  is not None:
        return apology("Username already exists", 403)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...