如何在Docker中使用MariaDB Python Connector?解决段错误问题
解决Python容器中MariaDB Connector参数化查询段错误问题
问题原因
- 库版本冲突:手动将MariaDB Connector/C解压到
/usr目录会覆盖系统自带的旧版libmariadb库,导致Python的mariadb模块调用参数化查询时出现ABI(应用二进制接口)不兼容,触发段错误。 - 占位符语法错误: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
相关产品推荐
相关产品推荐

