Ë
    V.jN&  ã                   óª   — d Z ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ d	d
lm	Z	 d	dlm
Z
  G d„ de«      Z G d„ de«      Z G d„ de«      ZeZy)a‘  

.. dialect:: mysql+mysqldb
    :name: mysqlclient (maintained fork of MySQL-Python)
    :dbapi: mysqldb
    :connectstring: mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
    :url: https://pypi.org/project/mysqlclient/

Driver Status
-------------

The mysqlclient DBAPI is a maintained fork of the
`MySQL-Python <https://sourceforge.net/projects/mysql-python>`_ DBAPI
that is no longer maintained.  `mysqlclient`_ supports Python 2 and Python 3
and is very stable.

.. _mysqlclient: https://github.com/PyMySQL/mysqlclient-python

.. _mysqldb_unicode:

Unicode
-------

Please see :ref:`mysql_unicode` for current recommendations on unicode
handling.

.. _mysqldb_ssl:

SSL Connections
----------------

The mysqlclient and PyMySQL DBAPIs accept an additional dictionary under the
key "ssl", which may be specified using the
:paramref:`_sa.create_engine.connect_args` dictionary::

    engine = create_engine(
        "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"
            }
        }
    )

For convenience, the following keys may also be specified inline within the URL
where they will be interpreted into the "ssl" dictionary automatically:
"ssl_ca", "ssl_cert", "ssl_key", "ssl_capath", "ssl_cipher",
"ssl_check_hostname". An example is as follows::

    connection_uri = (
        "mysql+mysqldb://scott:tiger@192.168.0.134/test"
        "?ssl_ca=/home/gord/client-ssl/ca.pem"
        "&ssl_cert=/home/gord/client-ssl/client-cert.pem"
        "&ssl_key=/home/gord/client-ssl/client-key.pem"
    )

.. seealso::

    :ref:`pymysql_ssl` in the PyMySQL dialect


Using MySQLdb with Google Cloud SQL
-----------------------------------

Google Cloud SQL now recommends use of the MySQLdb dialect.  Connect
using a URL like the following::

    mysql+mysqldb://root@/<dbname>?unix_socket=/cloudsql/<projectid>:<instancename>

Server Side Cursors
-------------------

The mysqldb dialect supports server-side cursors. See :ref:`mysql_ss_cursors`.

é    Né   )ÚMySQLCompiler)ÚMySQLDialect)ÚMySQLExecutionContext)ÚMySQLIdentifierPreparer)ÚTEXTé   )Úsql)Úutilc                   ó   — e Zd Zy)ÚMySQLExecutionContext_mysqldbN©Ú__name__Ú
__module__Ú__qualname__© ó    úcC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\sqlalchemy/dialects/mysql/mysqldb.pyr   r   c   ó   „ Ør   r   c                   ó   — e Zd Zy)ÚMySQLCompiler_mysqldbNr   r   r   r   r   r   g   r   r   r   c                   óà   ‡ — e Zd ZdZdZdZdZdZdZdZ	e
ZeZeZˆ fd„Zd„ Zej&                  j(                  d„ «       Zed„ «       Zˆ fd„Zd	„ Zdd
„Zˆ fd„Zdd„Zd„ Zd„ Zd„ Zd„ Z ˆ fd„Z!ˆ xZ"S )ÚMySQLDialect_mysqldbÚmysqldbTÚformatc                 óÌ   •— t        ‰| �  di |¤Ž | j                  �At        | j                  d«      r+| j	                  | j                  j
                  «      | _        y d| _        y )NÚ__version__©r   r   r   r   )ÚsuperÚ__init__ÚdbapiÚhasattrÚ_parse_dbapi_versionr   Ú_mysql_dbapi_version)ÚselfÚkwargsÚ	__class__s     €r   r    zMySQLDialect_mysqldb.__init__y   s[   ø€ Ü‰ÑÑ"˜6Ò"ð �z‰zÐ%¬'°$·*±*¸mÔ*Lð ×%Ñ% d§j¡j×&<Ñ&<Ó=ð 	Õ!ð ð 	Õ!r   c                 óz   — t        j                  d|«      }|r#t        d„ |j                  ddd«      D «       «      S y)Nz(\d+)\.(\d+)(?:\.(\d+))?c              3   ó8   K  — | ]  }|€Œt        |«      –— Œ y ­w©N)Úint)Ú.0Úxs     r   Ú	<genexpr>z<MySQLDialect_mysqldb._parse_dbapi_version.<locals>.<genexpr>„   s   è ø€ ÐKÑ)9 A¸Q¹]œ˜QŸÑ)9ùs   ‚Šr   é   r	   r   )ÚreÚmatchÚtupleÚgroup)r%   ÚversionÚms      r   r#   z)MySQLDialect_mysqldb._parse_dbapi_version�   s7   € Ü�H‰HÐ0°'Ó:ˆÙÜÑK¨¯©°°A°qÔ)9ÓKÓKÐKàr   c                 ó|   — 	 t        d«      j                  }|j                  | _        y# t        t
        f$ r Y yw xY w)NzMySQLdb.cursorsTF)Ú
__import__ÚcursorsÚSSCursorÚ	_sscursorÚImportErrorÚAttributeError)r%   r8   s     r   Úsupports_server_side_cursorsz1MySQLDialect_mysqldb.supports_server_side_cursorsˆ   s?   € ð	Ü Ð!2Ó3×;Ñ;ˆGØ$×-Ñ-ˆDŒNØøÜœ^Ð,ò 	Ùð	ús   ‚&) ©;º;c                 ó   — t        d«      S )NÚMySQLdb)r7   )Úclss    r   Úimport_dbapiz!MySQLDialect_mysqldb.import_dbapi‘   s   € ä˜)Ó$Ð$r   c                 ó0   •‡— t         ‰| �  «       Šˆfd„}|S )Nc                 ó¨   •— ‰� ‰| «       | j                  «       }|�5| j                  «       }|j                  d|z  «       |j                  «        y y )NzSET NAMES %s)Úcharacter_set_nameÚcursorÚexecuteÚclose)ÚconnÚcharset_namerE   Úsuper_s      €r   Ú
on_connectz3MySQLDialect_mysqldb.on_connect.<locals>.on_connect˜   sN   ø€ ØÐ!Ù�t”à×2Ñ2Ó4ˆLàÐ'ØŸ™›�Ø—‘˜~°Ñ<Ô=Ø—‘•ð (r   )r   rK   )r%   rK   rJ   r'   s     @€r   rK   zMySQLDialect_mysqldb.on_connect•   s   ù€ Ü‘Ñ#Ó%ˆô		ð Ðr   c                 ó$   — |j                  «        y)NT)Úping©r%   Údbapi_connections     r   Údo_pingzMySQLDialect_mysqldb.do_ping¥   s   € Ø×ÑÔØr   c                 ó<   — |j                  ||«      }|�||_        y y r*   )ÚexecutemanyÚ	_rowcount)r%   rE   Ú	statementÚ
parametersÚcontextÚrowcounts         r   Údo_executemanyz#MySQLDialect_mysqldb.do_executemany©   s'   € Ø×%Ñ% i°Ó<ˆØÐØ (ˆGÕð r   c                 ó”  •— |j                  d| j                  j                  d«      ›d| j                  j                  d«      ›d�«      j                  «       }| j                  dkD  xr |}|rIt        j                  t        j                  t        j                  d«      t        d¬	«      «      d
«      g}ng }t        ‰| �-  ||«      S )Nzshow collation where ÚCharsetz = 'utf8mb4' and Ú	Collationz = 'utf8mb4_bin')é   z'test collated returns'Úutf8mb4)ÚcharsetÚutf8mb4_bin)Úexec_driver_sqlÚidentifier_preparerÚquoteÚscalarÚserver_version_infor
   ÚcollateÚcastÚliteral_columnr   r   Ú_check_unicode_returns)r%   Ú
connectionÚ	collationÚhas_utf8mb4_binÚadditional_testsr'   s        €r   rh   z+MySQLDialect_mysqldb._check_unicode_returns®   sÁ   ø€ ð
 ×.Ò.ð ×(Ñ(×.Ñ.¨yÕ9Ø×(Ñ(×.Ñ.¨{Õ;ðó
÷ ‰&‹(ð 	ð ×2Ñ2°TÑ9ÒG¸iˆÙä—‘Ü—H‘HÜ×*Ñ*Ð+DÓEÜ YÔ/óð "óð Ñð  "ÐÜ‰wÑ-¨jÐ:JÓKÐKr   c                 óh  — |€t        ddd¬«      } |j                  di |¤Ž}|j                  |j                  «       t	        j
                  |dt        «       t	        j
                  |dt        «       t	        j
                  |dt        «       t	        j
                  |dt        «       t	        j
                  |d	t        «       t	        j
                  |d
t        «       t	        j
                  |dt        «       t	        j
                  |dt        «       i }dt        fdt        fdt        fdt        fdt        fdt        fg}|D ]2  \  }}||v sŒ||   ||dd  <   t	        j
                  ||dd  |«       ||= Œ4 |r||d<   |j                  d	d«      }| j                  «       }	|	�
||	z  }||d	<   g |gS )NÚdbÚuserÚpasswd)ÚdatabaseÚusernameÚpasswordÚcompressÚconnect_timeoutÚread_timeoutÚwrite_timeoutÚclient_flagÚlocal_infileÚuse_unicoder^   Ússl_caÚssl_keyÚssl_certÚ
ssl_capathÚ
ssl_cipherÚssl_check_hostnameé   Ússlr   r   )ÚdictÚtranslate_connect_argsÚupdateÚqueryr   Úcoerce_kw_typeÚboolr+   ÚstrÚgetÚ_found_rows_client_flag)
r%   ÚurlÚ_translate_argsÚoptsr‚   ÚkeysÚkeyÚkw_typerx   Úclient_flag_found_rowss
             r   Úcreate_connect_argsz(MySQLDialect_mysqldb.create_connect_argsÉ   s­  € ØÐ"Ü"Ø¨¸ôˆOð *ˆs×)Ñ)Ñ<¨OÑ<ˆØ�‰�C—I‘IÔä×Ñ˜D *¬dÔ3Ü×Ñ˜DÐ"3´SÔ9Ü×Ñ˜D .´#Ô6Ü×Ñ˜D /´3Ô7Ü×Ñ˜D -´Ô5Ü×Ñ˜D .´$Ô7ô 	×Ñ˜D -´Ô6Ü×Ñ˜D )¬SÔ1ð
 ˆà”sˆOØœÐØœÐØœ3ÐØœ3ÐØ!¤4Ð(ð
ˆó !‰LˆC�Ø�dŠ{Ø# C™y��C˜˜�G‘Ü×#Ñ# C¨¨Q¨R¨°'Ô:Ø˜‘Ið	 !ñ
 ØˆD�‰Kð —h‘h˜}¨aÓ0ˆà!%×!=Ñ!=Ó!?ÐØ!Ð-ØÐ1Ñ1ˆKØ"-ˆD�ÑØ�DˆzÐr   c                 óÌ   — | j                   �C	 t        | j                   j                  dz   «      j                  j                  }|j
                  S y # t        t        f$ r Y y w xY w)Nz.constants.CLIENT)r!   r7   r   Ú	constantsÚCLIENTÚ
FOUND_ROWSr<   r;   )r%   ÚCLIENT_FLAGSs     r   r‹   z,MySQLDialect_mysqldb._found_rows_client_flagü   sd   € Ø�:‰:Ð!ð/Ü)Ø—J‘J×'Ñ'Ð*=Ñ=ó ç‘)ŸF™Fð ð $×.Ñ.Ð.àøô #¤KÐ0ò Ùðús   Ž6A ÁA#Á"A#c                 ó    — |j                   d   S )Nr   )Úargs)r%   Ú	exceptions     r   Ú_extract_error_codez(MySQLDialect_mysqldb._extract_error_code	  s   € Ø�~‰~˜aÑ Ð r   c                 ó†   — 	 |j                   j                  } |«       S # t        $ r t        j                  d«       Y yw xY w)z:Sniff out the character set in use for connection results.z�No 'character_set_name' can be detected with this MySQL-Python version; please upgrade to a recent version of MySQL-Python.  Assuming latin1.Úlatin1)ri   rD   r<   r   Úwarn)r%   ri   Ú	cset_names      r   Ú_detect_charsetz$MySQLDialect_mysqldb._detect_charset  sK   € ð	ð #×-Ñ-×@Ñ@ˆIñ “;Ðøô ò 	Ü�I‰Ið#ôñ ð	ús   ‚ ŸA ¿A c                  ó   — y)N)ÚSERIALIZABLEzREAD UNCOMMITTEDzREAD COMMITTEDzREPEATABLE READÚ
AUTOCOMMITr   rN   s     r   Úget_isolation_level_valuesz/MySQLDialect_mysqldb.get_isolation_level_values  s   € ð
r   c                 óv   •— |dk(  r|j                  d«       y |j                  d«       t        ‰| �	  ||«       y )Nr¤   TF)Ú
autocommitr   Úset_isolation_level)r%   rO   Úlevelr'   s      €r   r¨   z(MySQLDialect_mysqldb.set_isolation_level'  s7   ø€ Ø�LÒ Ø×'Ñ'¨Õ-à×'Ñ'¨Ô.Ü‰GÑ'Ð(8¸%Õ@r   r*   )#r   r   r   ÚdriverÚsupports_statement_cacheÚsupports_unicode_statementsÚsupports_sane_rowcountÚsupports_sane_multi_rowcountÚsupports_native_decimalÚdefault_paramstyler   Úexecution_ctx_clsr   Ústatement_compilerr   Úpreparerr    r#   r   ÚlanghelpersÚmemoized_propertyr=   ÚclassmethodrA   rK   rP   rX   rh   r“   r‹   rœ   r¡   r¥   r¨   Ú__classcell__)r'   s   @r   r   r   k   s¶   ø„ Ø€FØ#ÐØ"&ÐØ!ÐØ#'Ð à"Ðà!ÐØ5ÐØ.ÐØ&€Hô
òð 
×Ñ×'Ñ'ñó (ðð ñ%ó ð%ôò ó)ô
Ló61òfò!òò$
÷Að Ar   r   )Ú__doc__r0   Úbaser   r   r   r   r   Ú r
   r   r   r   r   Údialectr   r   r   Ú<module>r¼      sW   ðñLó\ 
å Ý Ý 'Ý )Ý Ý Ý ô	Ð$9ô 	ô	˜Mô 	ôAA˜<ô AAðH �r   