我正在尝试创建一个简单的登录程序,该程序将记录的用户名和密码从变量保存到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
execute
方法期望将SQL查询字符串作为第一个参数,并将参数的元组作为第二个参数,但需要使用您的:
execute
并将create_users = ("""INSERT INTO users (username, password)
VALUES (?, ?)
;""", str(new1), str(new2))
作为create_users
参数传递:
query
您正在将元组作为第一个参数传递给cursor.execute(query)
方法,从而导致execute
。
相反,您可以分别传递查询字符串和参数:
TypeError