Bitnami MariaDB下Python执行update查询报mariadb无connect属性错误
问题根因
AttributeError: module 'mariadb' has no attribute 'connect' 报错和Bitnami MariaDB的路径差异无关,属于Python端依赖或导入逻辑错误:
- 已安装的
mysql-connector、mysql-connector-python是MySQL官方连接器,不提供mariadb.connect()调用入口 - 要么未安装MariaDB官方Python驱动,要么脚本所在目录存在同名
mariadb.py文件/mariadb文件夹,Python导入时优先加载了本地错误模块,而非官方驱动包。
修复步骤
- 先排查命名冲突:进入
kkk.py所在目录,执行ls | grep mariadb,如果返回mariadb.py或同名文件夹,直接重命名或删除,避免覆盖官方包导入逻辑。 - 清理冗余依赖,安装正确的MariaDB Python驱动:
pip uninstall -y mysql-connector mysql-connector-python mariadb pip install mariadb
如果安装过程中提示缺失系统依赖,Debian/Ubuntu系先执行
sudo apt install -y libmariadb-dev,CentOS/RHEL系先执行sudo yum install -y mariadb-devel,补全依赖后重新执行pip安装命令即可。
- 连接Bitnami版MariaDB时,本地部署优先走Socket连接(和你命令行访问逻辑一致,性能更高),远程调用再走TCP连接,不要混用参数。
可直接运行的Update代码
本地Socket连接(脚本和MariaDB在同一服务器时使用)
import mariadb connection = mariadb.connect( user="user1", password="pass", unix_socket="/opt/bitnami/mariadb/tmp/mysql.sock", database="db1" ) cursor = connection.cursor() dml = """ UPDATE product_options_combinations SET quantity=%s WHERE item_code =%s """ val = [(5944, '31628')] cursor.executemany(dml, val) print(f"成功更新{cursor.rowcount}行数据") connection.commit() cursor.close() connection.close()
远程TCP连接(脚本和MariaDB不在同一服务器时使用)
import mariadb connection = mariadb.connect( user="user1", password="pass", host="MariaDB所在服务器公网/内网IP", port=3306, database="db1" ) cursor = connection.cursor() dml = """ UPDATE product_options_combinations SET quantity=%s WHERE item_code =%s """ val = [(5944, '31628')] cursor.executemany(dml, val) print(f"成功更新{cursor.rowcount}行数据") connection.commit() cursor.close() connection.close()
可选方案(无需更换已安装的mysql-connector-python)
如果不想重装驱动,直接用已有的MySQL连接器也可以正常连接Bitnami MariaDB执行更新,只需要调整导入和连接逻辑即可:
import mysql.connector # 本地Socket连接示例,远程连接替换为host+port参数即可 connection = mysql.connector.connect( user="user1", password="pass", unix_socket="/opt/bitnami/mariadb/tmp/mysql.sock", database="db1" ) cursor = connection.cursor() dml = """ UPDATE product_options_combinations SET quantity=%s WHERE item_code =%s """ val = [(5944, '31628')] cursor.executemany(dml, val) print(f"成功更新{cursor.rowcount}行数据") connection.commit() cursor.close() connection.close()
注意事项
- 执行前确认使用的数据库账号拥有
product_options_combinations表的UPDATE权限,Bitnami环境默认管理员账号仅支持本地Socket登录,远程访问需要提前配置账号授权和防火墙规则。 - 执行更新操作后建议打印
cursor.rowcount确认受影响行数,避免条件写错导致批量更新错误。
内容的提问来源于stack exchange,提问作者Jeremy
相关产品推荐
相关产品推荐

