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

问题描述 投票:2回答:1

我正在尝试创建一个简单的登录程序,该程序将记录的用户名和密码从变量保存到SQLite3数据库中。使用硬编码的字符串运行程序可以按预期工作,但是当我尝试使用变量时,会出现基于str的TypeError。我尝试使用str(variable),但是那没用,我不确定还有什么问题。任何帮助,将不胜感激。

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
python python-3.x sqlite
1个回答
0
投票

execute方法期望将SQL查询字符串作为第一个参数,并将参数的元组作为第二个参数,但需要使用您的:

execute

并将create_users = ("""INSERT INTO users (username, password) VALUES (?, ?) ;""", str(new1), str(new2)) 作为create_users参数传递:

query

您正在将元组作为第一个参数传递给cursor.execute(query) 方法,从而导致execute

相反,您可以分别传递查询字符串和参数:

TypeError
© www.soinside.com 2019 - 2024. All rights reserved.