source

MySQLdb, mysqlclient 및 MySQL 커넥터/Python의 차이점은 무엇입니까?

itover 2022. 11. 22. 21:31
반응형

MySQLdb, mysqlclient 및 MySQL 커넥터/Python의 차이점은 무엇입니까?

그래서 python을 사용하여 데이터베이스 업데이트를 시도하다가 개발 환경 전체를 셋업하는 중에 이 세 가지를 발견하게 되어 어지럽습니다.

  1. MySQLDB가 있습니다.

  2. mysqlclient가 있습니다.

  3. 그리고 mysql 커넥터 비단뱀이 있습니다.

각각 어떤 점이 다릅니까? 차이점, 사용처 등은요?감사해요.

MySQLdb는 MySQL 데이터베이스용 API를 구현하는 C 모듈 주변의 얇은 파이썬 래퍼입니다.

얼마 전 MySQLDb1 버전의 래퍼가 사용되었으며, 현재는 레거시로 간주되고 있습니다.MySQLDb1이 버그 수정과 Python3 지원을 통해 MySQLDb2로 진화를 시작함에 따라 MySQLDb1이 포크되었으며, 이것이 버그 수정과 Python3 지원을 통해 mysqlclient가 등장한 방법입니다.요약하자면, 현재 운영 환경에 사용할 준비가 되지 않은 MySQLDb2와 구식 드라이버인 MySQLDb1 및 버그 수정 및 Python3 지원을 통해 커뮤니티에서 지원되는 mysqlclient가 있습니다.

이 문제를 해결하기 위해 MySQL은 자체 버전의 MySQL 어댑터 - mysql 커넥터를 제공합니다.Mysql 커넥터는 MySQL API를 사용하는 일체형 파이썬 모듈로 C 모듈 의존성이 없으며 표준 파이썬 모듈만 사용됩니다.

여기서의 질문은 mysqlclient vs mysql connector 입니다.

저 같은 경우에는 공식 지원 도서관으로 하겠습니다.mysqlclient그것도 좋은 선택일 거예요둘 다 최근 액티브한 커밋을 통해 확인할 수 있는 수정 및 신기능을 통해 능동적으로 업데이트되고 있습니다.

주의: 저는 경험이 적기 때문에 고객님의 요구에 맞지 않는 경우가 있을 수 있습니다.두 라이브러리 모두 PEP-249 표준에 준거하고 있습니다.즉, 모든 장소에서 적어도 기본 기능은 사용할 수 있습니다.

설치 및 의존관계

  • mysql클라이언트

C 래퍼의 포크로서 이러한 확장자를 구축하기 위해 파이썬 헤더 파일을 추가하는 MySQL을 사용하는 C 모듈이 필요합니다(python-dev 읽기).인스톨은 사용하는 시스템에 따라 다릅니다.패키지명을 알고, 인스톨 할 수 있는 것을 확인해 주세요.

Python용 MySQL 어댑터가 현재 유지되고 있습니다.

  • mysqlclient - CPython용 MySQL 커넥터 중 단연 가장 빠릅니다.필요한 것은mysql-connector-cC 라이브러리가 작동합니다.

  • PyMySQL - Pure Python MySQL 클라이언트.와의 양쪽 관리자에 따르면PyMySQL같은 경우:

    • 하면 안 요.libmysqlclient웬일인지 그래.
    • gevent 또는 eventlet의 monkeypatched 소켓을 사용하려고 합니다.
    • mysql 프로토콜을 해킹하면 안 돼
  • mysql-connector-python - MySQL connector는 Oracle의 MySQL 그룹이 개발한 것으로, Python으로 작성되어 있습니다.이 세 가지 중에서 성적이 제일 안 좋은 것 같아요.또한 라이선스의 문제로 인해 PyPI에서 다운로드 할 수 없습니다(단, conda를 통해 이용 가능).

벤치마크

다음음 according according according according according according 。mysqlclient파이톤 10개

사용자가 제공하는 많은 옵션.파티에 늦었다.하지만 2센트는 pypy 3.7 버전에 대한 벤치마킹에 관여하고 있습니다.

보다 빠른 액세스와 반복적인 액세스를 원하는 경우 mysqlclient를 사용합니다.

MySQL Connector/Python: 23.096168518066406 [sec]
mysqlclient: 6.815327882766724 [sec]
PyMySQL: 24.616853952407837 [sec]
MySQL Connector/Python: 22.619106769561768 [sec]
mysqlclient: 6.607790231704712 [sec]
PyMySQL: 24.410773038864136 [sec]

이전 벤치마크에서 루프...

def q100k(cur):
    t = time.time()
    for _ in range(100000):
        cur.execute("SELECT 1,2,3,4,5,6")
        res = cur.fetchall()
        assert len(res) == 1
        assert res[0] == (1, 2, 3, 4, 5, 6)
    return time.time() - t

SQL Chemy를 사용하는 개발자용

이 질문은 Python과 그 트레이드오프를 위해 어떤 DBAPI를 사용할 수 있는지 알 수 있는 좋은 출발점이 되었습니다.그러나 위에서 언급한 도서관들은 끊임없이 변화하고 있으며, 그 성과와 문제점들이 정해진 것은 아니다.그러므로, 각각의 사투리를 테스트하고 그들의 성능을 스스로 평가하는 것이 좋은 접근법이 될 것이다.

이용 가능한 DBAPI를 나열한 아래 링크를 제공했습니다.이러한 링크에는 각 라이브러리의 설명서에 대한 참조와 각 라이브러리의 기능과 지원에 대한 설명이 포함됩니다.

  • MariaDB의 경우: https://docs.sqlalchemy.org/en/14/dialects/mysql.html#module-sqlalchemy.dialects.mysql.base
  • PostgreSQL : https://docs.sqlalchemy.org/en/14/dialects/postgresql.html # : ~ : text = DBAPI % 20 지원 - , % C2 % B6, - % 20 following % 20 dialect
  • 추가 데이터베이스 사투리는 사이드 메뉴에서 찾을 수 있습니다.

DBAPI의 일반적인 의미를 이해하려면 위의 PEP-249를 읽고 이 링크를 사용하십시오.또한 아래 그림은 DBAPI가 아키텍처적으로 어디에 속하는지 시각화하는 데 도움이 됩니다.여기에 이미지 설명 입력

언급URL : https://stackoverflow.com/questions/43102442/whats-the-difference-between-mysqldb-mysqlclient-and-mysql-connector-python

반응형