簡體   English   中英

使用 SQLite3 將值從變量導入數據庫表時基於 Str 的 ValueError

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

我正在嘗試創建一個簡單的登錄程序,將記錄的用戶名和密碼從變量保存到 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 查詢字符串作為第一個參數,一個參數元組作為第二個參數,但是你的:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM