函数在 python 中不接受传输参数

Function not accepting transfer parameters in python

提问人:fiveBenilu 提问时间:11/7/2023 最后编辑:marc_sfiveBenilu 更新时间:11/7/2023 访问量:16

问:

我是python的新手,我目前正在尝试开发一个带有python数据库连接的简单程序。目前,我正在尝试创建一个函数来创建与我的数据库的连接,询问特定用户是否在此数据库中并返回布尔值。但是,我的函数需要两个传输参数才能工作:来自主程序的用户和密码。但是,每次我尝试运行此函数时,我都会收到以下错误:

TypeError:checkLogin() 接受 2 个位置参数,但给出了 3 个

这是我的连接类的代码:

from mysql.connector import *

class connection:

    def __init__(self, user, password, host, database):
        self.user = user
        self.password = password
        self.host = host
        self.database = database

    def writeToDB(query):
        '''Schreibt eine query auf die Datenbank'''
        conn = connect(object.user,object.password,object.host,object.database)
        cursor = conn.cursor()
        
        cursor.execute(query)
        conn.commit()
        cursor.close()
        conn.close()
    
    def checkLogin(myuser, mypassword):
        '''Fragt Login-Daten innerhalb einer Datenbank ab und liefert ein boolean zurück'''
        conn = connect(object.user,object.password,object.host,object.database)
        cursor = conn.cursor()
        
        cursor.execute("SELECT * FROM Benutzer WHERE Benutzername like '{myuser}' AND Passwort like '{mypassword}'")
        result = cursor.fetchone()
        cursor.close()
        conn.close()
        if result:
            return True
        else:
            return False

这是我的主类的一部分,我尝试通过对象实例 newConnection 调用函数:

def button_action():
    name = benutzername.get()
    passcode = passwort.get()
    bAllowed = newConnection.checkLogin(name, passcode)

我已经尝试了几件事来解决这个问题,但是它们都没有对错误产生影响。唯一对我有用的是将功能转移到我的主程序。然而,这质疑了面向对象的方法。我只是不明白为什么它不接受传输参数。希望你能帮到你!

函数 对象

评论


答:

0赞 Heinz Siahaan 11/7/2023 #1

您遇到的错误是由于类中的实例方法需要将实例本身(self)作为其第一个参数。在连接类中,writeToDB 和 checkLogin 方法都缺少 self 作为其第一个参数。

因此,您可以将方法更新为:

...
def writeToDB(self, query):
        '''Schreibt eine query auf die Datenbank'''
        conn = connect(user=self.user, password=self.password, host=self.host, database=self.database)
        cursor = conn.cursor()
.....


def checkLogin(self, myuser, mypassword):
        '''Fragt Login-Daten innerhalb einer Datenbank ab und liefert ein boolean zurück'''
        conn = connect(user=self.user, password=self.password, host=self.host, database=self.database)
        cursor = conn.cursor()
....

支持文章:

第1条

第2条

评论

0赞 fiveBenilu 11/7/2023
谢谢,错误解决了,我的程序正在工作!