在使用Python连接MySQL数据库时,有时报"ValueError(“Could not process parameters”)"错误,如图(1)所示:

图(1) MySQL报"ValueError("Could not process parameters)"错误

  • 首先排查,代码里的字段是否与数据库的字段保持一致(区分大小写);
  • 再排查,函数调用时的字段顺序,是否与声明时的字段顺序保持一致;

如果上面2项都是一致的(即已排除),那么很可能是下面的原因:

    出现该问题的原因是:传参时没有使用元组的方式,造成MySQL无法解析而报错。
    解决方法:使用元组的方式传入数据库。

1、修改前

    def execute(self, sql, args=None, commit=False):conn = self.pool.get_connection()cursor = conn.cursor()if args:cursor.execute(sql, args) ## 此处有问题else:cursor.execute(sql)if commit is True:conn.commit()self.close(conn, cursor)return Noneelse:res = cursor.fetchall()self.close(conn, cursor)return res

2、修复Bug

    def execute(self, sql, args=None, commit=False):conn = self.pool.get_connection()cursor = conn.cursor()if args:cursor.execute(sql, (args,) ) ## 要用元组的方式传参,即使用(arg,)else:cursor.execute(sql)if commit is True:conn.commit()self.close(conn, cursor)return Noneelse:res = cursor.fetchall()self.close(conn, cursor)return res

附录

3.1 MySQL数据库连接池基类

    创建数据库连接池基类,命名为base.py,默认支持5个connect连接。
    //base.py

import pymysql
import mysql.connector.poolingclass DataBaseInfo(object):def __init__(self, host='127.0.0.1', port='3306', user='root', password='xxx', database='chair'):self.host = hostself.port = portself.user = userself.password = passwordself.database = databasedef start_mysql(self):db = pymysql.connect(self.host, self.port, self.user, self.password, self.dbname)cursor = db.cursor()table_list = [db, cursor]return table_listclass DataBasePool(object):def __init__(self, host='127.0.0.1', port='3306', user='root', password='xxx', database='chair',pool_name='mypool', pool_size=5):self.host = hostself.port = portself.user = userself.password = passwordself.database = databaseres = {}res["host"] = self.hostres["port"] = self.portres["user"] = self.userres["password"] = self.passwordres["database"] = self.databaseself.dbconfig = resself.pool = self.create_pool(pool_name=pool_name, pool_size=pool_size)def create_pool(self, pool_name="mypool", pool_size=5):pool = mysql.connector.pooling.MySQLConnectionPool(pool_name=pool_name,pool_size=pool_size,pool_reset_session=True,**self.dbconfig)return pooldef close(self, conn, cursor):cursor.close()conn.close()def execute(self, sql, args=None, commit=False):conn = self.pool.get_connection()cursor = conn.cursor()if args:cursor.execute(sql, (args,))else:cursor.execute(sql)if commit is True:conn.commit()self.close(conn, cursor)return Noneelse:res = cursor.fetchall()self.close(conn, cursor)return resdef executemany(self, sql, args, commit=False):conn = self.pool.get_connection()cursor = conn.cursor()cursor.executemany(sql, args)if commit is True:conn.commit()self.close(conn, cursor)return Noneelse:res = cursor.fetchall()self.close(conn, cursor)return resdef executeRead(self, sql, args):conn = self.pool.get_connection()cursor = conn.cursor()cursor.executemany(sql, args)res = cursor.fetchall()self.close(conn, cursor)myData = []for row in res:myData.append(row)return myData

3.2 读写某个Table

    这里以读写chair数据库里的login表格为例,进行说明。
    //loginTable.py

from .base import DataBasePool# dbconfig = {#     "host": "127.0.0.1",
#     "port": "3306",
#     "user": "root",
#     "password": "xxx",
#     "database": "chair",
#     "pool_name": "mypool",
#     "pool_size": 5
# }class LoginTable(object):def __init__(self, dbConf):self.host = dbConf['host']self.port = dbConf['port']self.user = dbConf['user']self.password = dbConf['password']self.database = dbConf['database']self.pool_name = dbConf['pool_name']self.pool_size = int(dbConf['pool_size'])self.dbPool = DataBasePool(self.host, self.port, self.user, self.password,self.database, self.pool_name, self.pool_size)def insertTable(self, Uname, Upasswd):args = Uname, Upasswdsql = "insert into login (Uname, Upasswd) values (%s, %s)"bRes = self.dbPool.execute(sql, args, commit=True)return bResdef hasTable(self):sql = "SELECT table_name FROM information_schema.TABLES WHERE table_name='login'"strLen = len(str(self.dbPool.execute(sql)))bRes = True if strLen > 4 else Falsereturn bResdef selectName(self, name):args = namesql = "SELECT * FROM login WHERE Uname=%s"res = self.dbPool.execute(sql, args,False)return resdef selectAll(self):sql = "SELECT * FROM login"res = self.dbPool.execute(sql)return resdef isExisted(self, Uname):strLen = len(str(self.selectTable(Uname)))if strLen > 4:return Trueelse:return Falsedef updatePassword(self, Uname, Upasswd):sql = "UPDATE login SET Upasswd=%s where Uname=%s;"args = Upasswd, Unameres = self.dbPool.execute(sql, args, commit=True)bRes = True if res is None else Falsereturn bRes

3.3 创建login表格

    在Navicat里,导入login.sql文件,即可创建login表格。
    //login.sql

/*Navicat Premium Data TransferSource Server         : locaLWin10Source Server Type    : MySQLSource Server Version : 50733Source Host           : localhost:3306Source Schema         : chairTarget Server Type    : MySQLTarget Server Version : 50733File Encoding         : 65001Date: 11/04/2022 22:54:41
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for login
-- ----------------------------
DROP TABLE IF EXISTS `login`;
CREATE TABLE `login`  (`Uname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,`Upasswd` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,PRIMARY KEY (`Uname`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of login
-- ----------------------------
INSERT INTO `login` VALUES ('hua', '111');
INSERT INTO `login` VALUES ('Jerry', '222');
INSERT INTO `login` VALUES ('root', '333');
INSERT INTO `login` VALUES ('Tom', '555');SET FOREIGN_KEY_CHECKS = 1;

3.4 测试login表格

    读取login表格里某个用户比如Tom,测试代码如下:
    //doUser.py

from .loginTable import LoginTabledbconfig = {"host": "localhost","port": "3306","user": "root","password": "xxx","database": "chair","pool_name": "mypool","pool_size": 5
}myTab = LoginTable(dbconfig)res = myTab.selectName('Tom')
print('res:', res)

    效果如下:

图(2) 成功读取login里的Tom信息

3.5 MySQL连接池依赖包

    MySQL连接池有2个依赖包,如下:

pip install mysql-connector-python==8.0.27
pip install pymysql==1.0.2

解决MySQL报ValueError(“Could not process parameters“)错误相关推荐

  1. 解决MySQL报错ERROR 2002 (HY000)【转】

    今天在为新的业务线搭架数据库后,在启动的时候报错 root@qsbilldatahis-db01:/usr/local/mysql/bin# ./mysql ERROR 2002 (HY000): C ...

  2. 解决MySQL报错... right syntax to use near ‘password ‘XXX‘ at line 1...ERROR 1064 42000: You have an erro

    解决MySQL报错... right syntax to use near 'password 'XXX' at line 1...ERROR 1064 42000: You have an erro ...

  3. 解决MySQL报错ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost:3306‘ (10061)

    解决MySQL报错ERROR 2003 HY000: Can't connect to MySQL server on 'localhost:3306' 10061   笔者在新电脑安装完 MySQL ...

  4. 解决mysql报错ERROR 2002 (HY000)

    解决Mysql报错:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/my ...

  5. 如何解决MySql报错:only_full_groupBy

    如何解决MySql报错:only_full_groupBy 原因 mysql5.7之后默认会添加only_fulll_groupBy的规则(mysql的sqlMode),简单点说就是,会报这个错误的原 ...

  6. 解决MySQL报错ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)

    解决MySQL报错ERROR 2003 HY000: Can't connect to MySQL server on 'localhost:3306' 10061 笔者在新电脑安装完 MySQL 后 ...

  7. 已解决mysql报错ERROR 1049 (42000): Unknown database ‘数据库‘

    已解决mysql报错ERROR 1049 (42000): Unknown database '数据库' 文章目录 报错问题 解决方法 福利 报错问题 粉丝群里面的一个小伙伴敲代码时发生了报错(当时他 ...

  8. CentOS 7 下解决服务器报 Redis server went away 的错误

    这两天在学习 Redis,因为 Redis 在 Windows 上的表现并不好,而且线上环境基本上都是 Linux,所以选择在 CentOS 7 上跑跑例子.在安装完 Redis 的 PHP 客户端 ...

  9. mysql登陆1130错误_解决MySQL远程登录时出现ERROR 1130错误问题

    在用mysql进行远程连接时出现下列错误 [root@openfire ~]# mysql -u root -h mysql.clvn.com.cn -p Enter password: ERROR  ...

  10. mysql登陆1130错误_解决MySQL远程登录时出现ERROR 1130错误问题_MySQL

    在用mysql进行远程连接时出现下列错误 [root@openfire ~]# mysql -u root -h mysql.clvn.com.cn -p Enter password: ERROR ...

最新文章

  1. 算法学习之路|数位dp简要分析
  2. MySQL查询一周借阅最多的书_SQL中的借书经典案例
  3. python工程师-Python工程师学习之旅
  4. 关于Unity的协程
  5. 真香!GitHub刚刚宣布:私有库免费啦!
  6. this指针 java_彻底理解Java中this指针
  7. 品牌就是复购,运营就是零售
  8. mysql连接池满了_《MySql体系结构与存储引擎》面试腾讯前总结
  9. MySQL基础3-SQL语言
  10. 机器学习笔记(《统计学习方法》李航and《机器学习》周志华)
  11. 让老主板更新驱动程序不再拒绝新网卡(转)
  12. 现代计算机图形学笔记(六)——布林-冯反射模型、图形管线、纹理映射
  13. 身份证某几位用*代替
  14. Python 人脸抓拍
  15. 如何快速画好一张程序流程图
  16. php代码写一串新年祝福,临时保存新年祝福的php+dede
  17. Android——修改主题颜色
  18. ios静态库和代码同名_使用一个代码库开始制作NativeScript iOS和Android应用程序
  19. 快速找到win10的截图工具
  20. 【转载】详细制作form的方法

热门文章

  1. Java使用二维码实现签到技术
  2. pbr发光 unity_Unity PBR—BRDF
  3. 使用正则表达式在Java中悬挂缩进段落
  4. 黑暗城堡 LibreOJ - 10064(SPFA)
  5. android 4.4 设置谷歌拼音输入法为默认输入法,android4.4修改出厂默认输入法
  6. iOS 微信8.0.11更新,新功能,新变化
  7. 密码学_最近在论证一个问题,到底是先有鸡还是先有蛋
  8. The Open Group正式发布《The Open Group IT4IT参考架构版本 2.1》
  9. python数据清洗工具、方法、过程整理归纳(六、数据清洗之数据预处理(一)——重复值处理、缺失值处理)
  10. 开源图像数据集管理工具fiftyone使用