简体   繁体   English

使用 SQLite3 将值从变量导入数据库表时基于 Str 的 ValueError

[英]Str-based ValueError when using SQLite3 to import values from a variable to a database table

I'm trying to create a simple login program that saves the recorded username and password from variables into an SQLite3 database.我正在尝试创建一个简单的登录程序,将记录的用户名和密码从变量保存到 SQLite3 数据库中。 Running the program using hardcoded strings works as expected, but when I try to use variables, a str-based TypeError occurs.使用硬编码字符串运行程序按预期工作,但是当我尝试使用变量时,会发生基于 str 的 TypeError。 I tried using str(variable), but that didn't work and I'm unsure what else could be problem.我尝试使用 str(variable),但这不起作用,我不确定还有什么问题。 Any help would be appreciated.任何帮助,将不胜感激。

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

The execute method expects a SQL query string as the first argument and a tuple of parameters as the second argument, and yet with your: execute方法需要一个 SQL 查询字符串作为第一个参数,一个参数元组作为第二个参数,但是你的:

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

and passing create_users as the query argument to do:并将create_users作为query参数传递以执行以下操作:

cursor.execute(query)

you are passing a tuple as the first argument to the execute method, resulting in the TypeError .您将元组作为第一个参数传递给execute方法,从而导致TypeError

Instead, you can pass the query string and the parameters separately:相反,您可以分别传递查询字符串和参数:

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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM