python - MySQL 查询参数的数量与传递给执行的参数匹配,但 Python 引发 "not all arguments converted"

标签 python mysql sql

调用此函数以插入学生时,出现异常 _mysql_exceptions.ProgrammingError: not all arguments converted during string formatting。查询中的参数数量与我传递的参数数量相匹配。我的其他 SQL 查询工作正常。我在 Python 3 上使用 Flask-MySQLdb 来处理 MySQL 连接。

def create_student(surname, forename, dob, address, phone, gender, tutor, email):
    cursor = mysql.connection.cursor()
    cursor.execute('''
        INSERT INTO students(surname, forename, dob, address, phone, gender, tutor, email) 
        VALUES(?, ?, ?, ?, ?, ?, ?, ?)''', (surname, forename, dob, address, phone, gender, tutor, email))
    mysql.connection.commit()
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1997, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1985, in wsgi_app
    response = self.handle_exception(e)
  File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1540, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.5/dist-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.5/dist-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/mnt/c/Users/root/Desktop/student-admin/main.py", line 184, in create
    if create_student(surname, forename, dob, address, phone, gender, tutor, email):
  File "/mnt/c/Users/root/Desktop/student-admin/main.py", line 60, in create_student
    VALUES(?, ?, ?, ?, ?, ?, ?, ?)''', (surname, forename, dob, address, phone, gender, tutor, email))
  File "/usr/local/lib/python3.5/dist-packages/MySQLdb/cursors.py", line 240, in execute
    self.errorhandler(self, ProgrammingError, str(m))
  File "/usr/local/lib/python3.5/dist-packages/MySQLdb/connections.py", line 52, in defaulterrorhandler
    raise errorclass(errorvalue)
_mysql_exceptions.ProgrammingError: not all arguments converted during string formatting

最佳答案

编写准备好的语句的正确方法如下:

def create_student(surname, forename, dob, address, phone, gender, tutor, email):
    cursor = mysql.connection.cursor()
    cursor.execute('''
        INSERT INTO students(surname, forename, dob, address, phone, gender, tutor, email)
        VALUES(%s, %s, %s, %s, %s, %s, %s, %s)''', (surname, forename, dob, address, phone, gender, tutor, email))
    mysql.connection.commit()

错误来自于 mysql 模块找不到放置您提供的参数的位置,因为它没有将问号解释为占位符,因此产生了一个错误,告诉您 _mysql_exceptions .ProgrammingError: not all arguments converted during string formatting,在人类语言中,这意味着它无法将您的参数放入格式字符串中。

关于python - MySQL 查询参数的数量与传递给执行的参数匹配,但 Python 引发 "not all arguments converted",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45110251/

相关文章:

python - 如何将API时间戳转换为python日期时间对象

sql - 如何选择适合我的目的的数据库?我想存储文件元数据。

sql - 删除加入语句

mysql - 根据评论从论坛中选择话题

python - 人脸识别没有检测到任何 OpenCV

python - 如何使用 vault 在 Ansible 中运行 playbook api

python - 迭代 pandas df 行并执行操作

php - Android 使用 PHP 连接 MySQL

php - 使用 PDO 分页后仅显示一行

mysql - 如何使用mysql计算时间总和