DB/Sqlalchemy

[SQLAlchemy] (5-1) DB driver 종류 (mysql/maria)

yubi5050 2024. 9. 16. 19:49

개요

해당 글은 Sqlalchemy mysql 파트 공식 문서  을 정리한 것이다. 

Sqlalchemy에서 mysql, mariadb에 지원하는 여러가지 Driver 들에 대해 알아본다.

대부분의 라이브러리들은 mysql, maria 같이 지원한다.

MySQL은 5.0.2 버전 ~ 최신 릴리스까지 지원, MariaDB는 모든 최신 버전 지원한다.

MySQL과 MariaDB는 기본적인 호환성을 유지하지만 개발은 계속해서 갈라지고 있음, SQLAlchemy에서는 두 DB간 가벼운 차이만 있어, DB 연결 URL 등을 변경할 필요 없음.

https://docs.sqlalchemy.org/en/20/dialects/mysql.html#dialect-mysql

 

1. mysqlclient

공식 문서 : https://pypi.org/project/mysqlclient/

특징

- maria db에서도 사용 가능

- SQLAlchemy 공식적으로 지원

연결 방법 (SSL)

engine = create_engine(
    # 연결 문자열
    # mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
    "mysql+mysqldb://scott:tiger@192.168.0.134/test",
    connect_args={
        "ssl": {
            "ca": "/home/gord/client-ssl/ca.pem",
            "cert": "/home/gord/client-ssl/client-cert.pem",
            "key": "/home/gord/client-ssl/client-key.pem"
        }
    }
)

 

 

2. PyMySQL

공식 문서 : https://pymysql.readthedocs.io/

특징

- maria db에서도 사용 가능

- SQLAlchemy 공식적으로 지원

연결 방법

# mysql 연결 방법 (maria도 이걸로 해도 됨)
mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]

# maria 연결 방법
mariadb+pymysql://user:pass@some_mariadb/dbname?charset=utf8mb4

 

3. MySQL-Connetor

공식 문서 : https://pypi.org/project/mysql-connector-python/

특징

- SQLAlchemy 에서 Integration이 완벽하지는 않음

연결 방법 

mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>

 

4. asyncmy

공식 문서 : https://github.com/long2ice/asyncmy

특징

- mariadb에서도 사용 가능

- SQLAlchemy 에서 공식적으로 지원

- 높은 benchmark를 가진다고 함

https://github.com/long2ice/asyncmy/raw/dev/images/benchmark.png

 

연결 방법 

# DB 연결 string
# mysql+asyncmy://user:password@host:port/dbname[?key=value&key=value...]

from sqlalchemy.ext.asyncio import create_async_engine
engine = create_async_engine("mysql+asyncmy://user:pass@hostname/dbname?charset=utf8mb4")

 

5. MariaDB-Connector

공식 문서 : https://pypi.org/project/mariadb/

연결 방법 

mariadb+mariadbconnector://<user>:<password>@<host>[:<port>]/<dbname>

 

 

6. aiomysql

공식 문서 : https://github.com/aio-libs/aiomysql

특징

- mariadb에서도 사용 가능

- SQLAlchemy 에서 Integration이 완벽하지는 않음

연결 방법 

# 연결 문자열
# mysql+aiomysql://user:password@host:port/dbname[?key=value&key=value...]

from sqlalchemy.ext.asyncio import create_async_engine
engine = create_async_engine("mysql+aiomysql://user:pass@hostname/dbname?charset=utf8mb4")

 

7. pyodbc

공식 문서 : https://pypi.org/project/pyodbc/

특징

- mariadb에서도 사용 가능

- SQLAlchemy 에서 Integration이 완벽하지는 않음

연결 방법 

# 연결 문자열
# mysql+pyodbc://<username>:<password>@<dsnname>

import urllib
connection_string = (
    'DRIVER=MySQL ODBC 8.0 ANSI Driver;'
    'SERVER=localhost;'
    'PORT=3307;'
    'DATABASE=mydb;'
    'UID=root;'
    'PWD=(whatever);'
    'charset=utf8mb4;'
)
params = urllib.parse.quote_plus(connection_string)
connection_uri = "mysql+pyodbc:///?odbc_connect=%s" % params