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

如何在Docker中使用MariaDB Python Connector?解决段错误问题

解决Python容器中MariaDB Connector参数化查询段错误问题

问题原因

  1. 库版本冲突:手动将MariaDB Connector/C解压到/usr目录会覆盖系统自带的旧版libmariadb库,导致Python的mariadb模块调用参数化查询时出现ABI(应用二进制接口)不兼容,触发段错误。
  2. 占位符语法错误:MariaDB Python Connector不支持?作为参数占位符,正确的占位符是%s(所有类型通用,包括整数),错误语法会加剧执行异常。

修复后的Dockerfile

FROM python:3.11-buster

# 添加MariaDB官方源,获取兼容版本的Connector/C
RUN apt-get update && apt-get install -y gnupg2 curl
RUN curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash -s -- --mariadb-server-version=10.6

# 安装匹配的Connector/C和编译依赖
RUN apt-get update && apt-get install -y gcc libmariadb3 libmariadb-dev

WORKDIR /appli

# 安装Python依赖
RUN pip3 install --no-cache-dir pynetdicom>=2.0 mariadb==1.1.4

COPY . .

CMD ["python3", "AEServer.py"]

修正后的Python代码

import mariadb

conn = mariadb.connect(user='myself', password='mypass', host=ip, database='db')
cursor = conn.cursor()
data = ('1.2.392', 'NAME^SURNAME^', 'BDAY', 'DX', 1)
# 使用MariaDB Connector正确的%s占位符,所有类型通用
insert_stmt = "INSERT INTO Examens VALUES (%s, %s, %s, %s, %s, 'COMING')"

# 安全的参数化查询执行
cursor.execute(insert_stmt, data)
conn.commit()  # 必须提交事务确保数据写入

说明

  • 官方源安装的libmariadb库会和mariadb Python模块版本完全兼容,彻底解决ABI冲突问题。
  • 参数化查询统一使用%s作为占位符,MariaDB Connector会自动处理类型转换,既避免SQL注入又保证执行安全。
  • 新增conn.commit()确保插入操作生效,mariadb连接默认不会自动提交事务。

内容的提问来源于stack exchange,提问作者IMAGE-ET

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:15:47