解决MySQL报ValueError(“Could not process parameters“)错误
在使用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“)错误相关推荐
- 解决MySQL报错ERROR 2002 (HY000)【转】
今天在为新的业务线搭架数据库后,在启动的时候报错 root@qsbilldatahis-db01:/usr/local/mysql/bin# ./mysql ERROR 2002 (HY000): C ...
- 解决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 ...
- 解决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 ...
- 解决mysql报错ERROR 2002 (HY000)
解决Mysql报错:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/my ...
- 如何解决MySql报错:only_full_groupBy
如何解决MySql报错:only_full_groupBy 原因 mysql5.7之后默认会添加only_fulll_groupBy的规则(mysql的sqlMode),简单点说就是,会报这个错误的原 ...
- 解决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 后 ...
- 已解决mysql报错ERROR 1049 (42000): Unknown database ‘数据库‘
已解决mysql报错ERROR 1049 (42000): Unknown database '数据库' 文章目录 报错问题 解决方法 福利 报错问题 粉丝群里面的一个小伙伴敲代码时发生了报错(当时他 ...
- CentOS 7 下解决服务器报 Redis server went away 的错误
这两天在学习 Redis,因为 Redis 在 Windows 上的表现并不好,而且线上环境基本上都是 Linux,所以选择在 CentOS 7 上跑跑例子.在安装完 Redis 的 PHP 客户端 ...
- mysql登陆1130错误_解决MySQL远程登录时出现ERROR 1130错误问题
在用mysql进行远程连接时出现下列错误 [root@openfire ~]# mysql -u root -h mysql.clvn.com.cn -p Enter password: ERROR ...
- mysql登陆1130错误_解决MySQL远程登录时出现ERROR 1130错误问题_MySQL
在用mysql进行远程连接时出现下列错误 [root@openfire ~]# mysql -u root -h mysql.clvn.com.cn -p Enter password: ERROR ...
最新文章
- 算法学习之路|数位dp简要分析
- MySQL查询一周借阅最多的书_SQL中的借书经典案例
- python工程师-Python工程师学习之旅
- 关于Unity的协程
- 真香!GitHub刚刚宣布:私有库免费啦!
- this指针 java_彻底理解Java中this指针
- 品牌就是复购,运营就是零售
- mysql连接池满了_《MySql体系结构与存储引擎》面试腾讯前总结
- MySQL基础3-SQL语言
- 机器学习笔记(《统计学习方法》李航and《机器学习》周志华)
- 让老主板更新驱动程序不再拒绝新网卡(转)
- 现代计算机图形学笔记(六)——布林-冯反射模型、图形管线、纹理映射
- 身份证某几位用*代替
- Python 人脸抓拍
- 如何快速画好一张程序流程图
- php代码写一串新年祝福,临时保存新年祝福的php+dede
- Android——修改主题颜色
- ios静态库和代码同名_使用一个代码库开始制作NativeScript iOS和Android应用程序
- 快速找到win10的截图工具
- 【转载】详细制作form的方法
热门文章
- Java使用二维码实现签到技术
- pbr发光 unity_Unity PBR—BRDF
- 使用正则表达式在Java中悬挂缩进段落
- 黑暗城堡 LibreOJ - 10064(SPFA)
- android 4.4 设置谷歌拼音输入法为默认输入法,android4.4修改出厂默认输入法
- iOS 微信8.0.11更新,新功能,新变化
- 密码学_最近在论证一个问题,到底是先有鸡还是先有蛋
- The Open Group正式发布《The Open Group IT4IT参考架构版本 2.1》
- python数据清洗工具、方法、过程整理归纳(六、数据清洗之数据预处理(一)——重复值处理、缺失值处理)
- 开源图像数据集管理工具fiftyone使用