You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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导入时优先加载了本地错误模块,而非官方驱动包。
修复步骤
  1. 先排查命名冲突:进入kkk.py所在目录,执行ls | grep mariadb,如果返回mariadb.py或同名文件夹,直接重命名或删除,避免覆盖官方包导入逻辑。
  2. 清理冗余依赖,安装正确的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安装命令即可。

  1. 连接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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 03:39:29