Python MySQL连接器中的变量在函数中不工作

Python MySQL连接器中的变量在函数中不工作,python,mysql,mysql-python,Python,Mysql,Mysql Python,我已经做了一个函数来整理我将在程序中执行的SQL调用。 通常情况下,这会起作用 mycursor = mydbr.cursor() mycursor.execute("SELECT song FROM charts WHERE artist=%s",(artist,)) x = mycursor.fetchone() 我的函数如下所示 import mysql.connector def SqlQuery(connection, query, forvar1 = None, forvar2 =

我已经做了一个函数来整理我将在程序中执行的SQL调用。 通常情况下,这会起作用

mycursor = mydbr.cursor()
mycursor.execute("SELECT song FROM charts WHERE artist=%s",(artist,))
x = mycursor.fetchone()
我的函数如下所示

import mysql.connector
def SqlQuery(connection, query, forvar1 = None, forvar2 = None):
    sqlobj = connection.cursor()
    if forvar1 is None and forvar2 is None:
        sqlobj.execute(query)
    if forvar1 is not None and forvar2 is None:
        sqlobj.execute(query, forvar1)
    if forvar1 is not None and forvar2 is not None:
        queryvars = (forvar1,forvar2)
        sqlobj.execute(query % queryvars)
    result = sqlobj.fetchone()
    connection.commit
    return result
record = SqlQuery(mydbr, sql[0], artist)

查询列表

sql = ["SELECT song FROM charts WHERE artist=%s"]
我的函数调用如下所示

import mysql.connector
def SqlQuery(connection, query, forvar1 = None, forvar2 = None):
    sqlobj = connection.cursor()
    if forvar1 is None and forvar2 is None:
        sqlobj.execute(query)
    if forvar1 is not None and forvar2 is None:
        sqlobj.execute(query, forvar1)
    if forvar1 is not None and forvar2 is not None:
        queryvars = (forvar1,forvar2)
        sqlobj.execute(query % queryvars)
    result = sqlobj.fetchone()
    connection.commit
    return result
record = SqlQuery(mydbr, sql[0], artist)

但是,每当它运行时,它都没有添加变量,我观察了通过wireshark发送的内容,看起来是这样的

SELECT song FROM charts WHERE artist=%s

任何帮助都将是巨大的

该死的,我尝试了这么多的变化,但这个网站有一个正确的

应该是

sqlobj.execute(query, (forvar1,))

请使用正确的语法,我将按照以下描述:

import mysql.connector
def SqlQuery(connection, query, forvar1 = None, forvar2 = None):
    sqlobj = connection.cursor()
    if forvar1 is None and forvar2 is None:
        sqlobj.execute(query)
    if forvar1 is not None and forvar2 is None:
        sqlobj.execute(query, (forvar1, ) )
    if forvar1 is not None and forvar2 is not None:
        queryvars = (forvar1,forvar2, )
        sqlobj.execute(query, queryvars)
    result = sqlobj.fetchone()
    connection.commit
    return result
示例

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  passwd="yourpassword",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "SELECT * FROM customers WHERE address = %s"
adr = ("Yellow Garden 2", )

mycursor.execute(sql, adr)

myresult = mycursor.fetchall()

for x in myresult:
  print(x) 

谢谢你的意见。这样做的目的是使它成为一个函数,这样我就不必每次都编写5行代码来执行查询。