我写了一个docker编写文件并使用了docker compose up -d命令.然后我写了一个简单的Python脚本来连接maria DB,但每次都会出现错误.

我的虚拟环境中的mariadb版本是1.0.11 pip install mariadb==1.0.11

version: '3.8'

services:
  mariadb:
    image: mariadb:latest
    container_name: my_mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: myrpass  
      MYSQL_DATABASE: db1   
      MYSQL_USER: user          
      MYSQL_PASSWORD: mypass  
    volumes:
      - mariadb-data:/var/lib/mysql  
    ports:
      - "3307:3307"  
volumes:
 mariadb-data: {} 

我的Python代码:

import mariadb

host = "mariadb"
port = 3307
user = "user"
password = "mypass"
database = "db1"

try:
    conn = mariadb.connect(
        host=host,
        port=port,
        user=user,
        password=password,
        database=database
    )
    cursor = conn.cursor()
    cursor.execute("SELECT VERSION()")
    version = cursor.fetchone()[0]
    print(f"Connected to MariaDB server version: {version}")
except mariadb.Error as e:
    print(f"Error connecting to database: {e}")
else:
    print('Connection found attempting to close it now')
    if conn:
        conn.cursor().close()
        conn.close()
finally:
    print('Code execution complete')

使用mariadb作为主机时出错:

Error connecting to database: Unknown MySQL server host 'mariadb' (-3)
Code execution complete

使用本地主机作为主机时出错:

Error connecting to database: Access denied for user 'user'@'localhost' (using password: YES)
Code execution complete

推荐答案

    
version: '3.8'

services:
  MySQL:
    image: MySQL:latest
    container_name: db_MySQL
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: r_pass
      MYSQL_AUTHENTICATION_PLUGIN: 'MySQL_native_password'
      # ... other environment variables
    volumes:
      - MySQL-data:/var/lib/MySQL
    ports:
      - "3306:3306"

  mariadb:
    image: mariadb:latest
    container_name: db_mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: r_pass
      MYSQL_AUTHENTICATION_PLUGIN: 'MySQL_native_password'
      # ... other environment variables
    volumes:
      - mariadb-data:/var/lib/MySQL
    ports:
      - "3307:3306"

volumes:
  MySQL-data: {}
  mariadb-data: {}

这是我的docker-compose.yml文件

Create docker compose images

docker compose up -d

Stop docker compose

docker compose down -v

Enter inside docker containers for

MySQL

docker exec -it db_MySQL MySQL -u root -p

mariadb

docker exec -it db_mariadb mariadb -u root -p

password for MySQL and mariadb

r_pass

前提是您是ubuntu用户

sudo apt-get install libmariadb-dev

pip3 install mariadb==1.0.11

Python code

# Module Imports
import mariadb
import sys

# Connect to MariaDB Platform
try:
    conn = mariadb.connect(
        user="root",
        password="r_pass",
        host="<docker_ip>", # docker inspect db_mariadb
        port=3306,
        database="test"

    )
except mariadb.Error as e:
    print(f"Error connecting to MariaDB Platform: {e}")
    sys.exit(1)

# Get Cursor
cur = conn.cursor()

Python相关问答推荐

使用polars .滤镜进行切片速度比pandas .loc慢

使用SciPy进行曲线匹配未能给出正确的匹配

Pandas 有条件轮班操作

将两只Pandas rame乘以指数

发生异常:TclMessage命令名称无效.!listbox"

Polars:用氨纶的其他部分替换氨纶的部分

基于索引值的Pandas DataFrame条件填充

如果条件不满足,我如何获得掩码的第一个索引并获得None?

将9个3x3矩阵按特定顺序排列成9x9矩阵

创建可序列化数据模型的最佳方法

考虑到同一天和前2天的前2个数值,如何估算电力时间序列数据中的缺失值?

Polars asof在下一个可用日期加入

在代码执行后关闭ChromeDriver窗口

人口全部乱序 - Python—Matplotlib—映射

用SymPy在Python中求解指数函数

PySpark:如何最有效地读取不同列位置的多个CSV文件

SpaCy:Regex模式在基于规则的匹配器中不起作用

用来自另一个数据框的列特定标量划分Polars数据框中的每一列,

FileNotFoundError:[WinError 2]系统找不到指定的文件:在os.listdir中查找扩展名

为什么在更新Pandas 2.x中的列时,数据类型不会更改,而在Pandas 1.x中会更改?