使用cx_Oracle操作MariaDB执行UPDATE语句报字符串格式化参数不匹配错误
问题根因与解决方案
1. 核心错误:数据库驱动不匹配
cx_Oracle是仅用于Oracle数据库连接的专属驱动,不支持MariaDB/MySQL的语法解析与交互,这是报错的核心原因。该驱动无法识别:1格式的占位符,会将其当做普通字符串处理,参数传入后无法完成格式化匹配,直接抛出你遇到的类型错误。
连接MariaDB请更换为mysql-connector-python(官方驱动)或pymysql(轻量驱动)。
2. 绑定变量语法不兼容
Oracle的位置绑定变量使用:1、:2格式,而MariaDB/MySQL的位置占位符统一使用%s,你的SQL语句占位符规则不符合当前连接的数据库要求。
3. 其他写法错误
commit是数据库连接对象的方法,不是游标对象的方法,你写的cursor.commit()是无效写法,需要修改为连接实例.commit()。
可运行的修正代码
第一步先安装对应驱动:
pip install mysql-connector-python
第二步修改代码逻辑:
import mysql.connector # 替换为你自己的数据库连接参数 conn = mysql.connector.connect( host="127.0.0.1", user="数据库用户名", password="数据库密码", database="对应的库名" ) cursor = conn.cursor() values = ['logfile', 'report_file', 'subfolder', 'FAILED'] # 占位符统一替换为%s query = "UPDATE temp SET file_logging=%s, file_report=%s, submission_subfolder=%s, status=%s where id = 1" cursor.execute(query, values) # 使用连接对象执行commit conn.commit() # 用完关闭资源 cursor.close() conn.close()
内容的提问来源于stack exchange,提问作者CodingCat
相关产品推荐
相关产品推荐

