ValueError на основе строк при использовании SQLite3 для импорта значений из переменной в таблицу базы данных - PullRequest
2 голосов
/ 25 февраля 2020

Я пытаюсь создать простую программу входа в систему, которая сохраняет записанные имя пользователя и пароль из переменных в базу данных SQLite3. Запуск программы с использованием жестко закодированных строк работает, как и ожидалось, но когда я пытаюсь использовать переменные, происходит ошибка TypeError на основе строки. Я попытался использовать str (переменная), но это не сработало, и я не уверен, что еще может быть проблемой. Любая помощь будет оценена.

import sqlite3
from sqlite3 import Error
import sys

def execute_query(connection, query):
    cursor = connection.cursor()
    try:
        cursor.execute(query)
        connection.commit()
        print("Query executed successfully")
    except Error as e:
        print(f"The error '{e}' occurred")

def create_new_user(new1, new2):

    create_users =  ("""INSERT INTO users (username, password)
                       VALUES (?, ?)
                        ;""", str(new1), str(new2))

    execute_query(connection, create_users)   

create_users_table =  """CREATE TABLE IF NOT EXISTS users (
                                        id INTEGER PRIMARY KEY AUTOINCREMENT,
                                        username TEXT NOT NULL,
                                        password TEXT NOT NULL
                                    ); """

execute_query(connection, create_users_table)

user = input("Would you like to create an account? ")
if "yes" in user:

    new1 = input("\nNew username: ")
    new2 = input("New password: ")
    create_new_user(new1, new2)

else:
    sys.exit(0)
Traceback (most recent call last):
  File "/Users/scnewmark/Documents/Database/database.py", line 62, in <module>
    create_new_user(new1, new2)
  File "/Users/scnewmark/Documents/Database/database.py", line 40, in create_new_user
    execute_query(connection, create_users)
  File "/Users/scnewmark/Documents/Database/database.py", line 18, in execute_query
    cursor.execute(query)
ValueError: operation parameter must be str

1 Ответ

1 голос
/ 25 февраля 2020

Метод execute ожидает строку запроса SQL в качестве первого аргумента и кортеж параметров в качестве второго аргумента, но с вашими:

create_users =  ("""INSERT INTO users (username, password)
                   VALUES (?, ?)
                    ;""", str(new1), str(new2))

и передавая create_users в качестве аргумента query для выполнения:

cursor.execute(query)

вы передаете кортеж в качестве первого аргумента методу execute, в результате чего TypeError.

Вместо этого вы можете отдельно передать строку запроса и параметры:

def execute_query(connection, query, credentials):
    cursor = connection.cursor()
    try:
        cursor.execute(query, credentials)
        connection.commit()
        print("Query executed successfully")
    except Error as e:
        print(f"The error '{e}' occurred")

def create_new_user(new1, new2):

    query = "INSERT INTO users (username, password) VALUES (?, ?);"
    credentials = str(new1), str(new2))

    execute_query(connection, query, credentials)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...