ó
    øÞ jØ&  ã                  óx  • S r SSKJr  SSKrSSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  SS	KJ
r
  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  \(       a6  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ r    " S S\5      r! " S S\5      r" " S  S!\5      r#\#r$g)"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:

.. sourcecode:: text

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

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

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

é    )ÚannotationsN)ÚAny)ÚCallable)Úcast)ÚDict)ÚOptional)ÚTuple)ÚTYPE_CHECKINGé   )ÚMySQLCompiler)ÚMySQLDialect)ÚMySQLExecutionContext)ÚMySQLIdentifierPrepareré   )Úutil)ÚLiteral)Ú
Connection)Ú_DBAPIMultiExecuteParams)ÚConnectArgsType)ÚDBAPIConnection)ÚDBAPICursor)ÚDBAPIModule)ÚExecutionContext)ÚIsolationLevel)ÚURLc                  ó   • \ rS rSrSrg)ÚMySQLExecutionContext_mysqldbéw   © N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    Ú[/var/www/html/gaurav/venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/mysqldb.pyr   r   w   ó   † Úr&   r   c                  ó   • \ rS rSrSrg)ÚMySQLCompiler_mysqldbé{   r   Nr    r   r&   r'   r*   r*   {   r(   r&   r*   c                  óf  ^ • \ rS rSr% SrSrSrSrSrSr	Sr
\r\r\rS\S'   SU 4S jjrSS jr\R*                  R,                  SS	 j5       r\SS
 j5       rSU 4S jjrSS jr S         SS jjr S     SS jjrSS jrS S jrS!S jr     S"S jr!S#S jr"      S$U 4S jjr#Sr$U =r%$ )%ÚMySQLDialect_mysqldbé   ÚmysqldbTÚformatúTuple[int, ...]Úserver_version_infoc                óÚ   >• [         TU ]  " S0 UD6  U R                  bF  [        U R                  S5      (       a+  U R	                  U R                  R
                  5      U l        g SU l        g )NÚ__version__©r   r   r   r   )ÚsuperÚ__init__ÚdbapiÚhasattrÚ_parse_dbapi_versionr4   Ú_mysql_dbapi_version)ÚselfÚkwargsÚ	__class__s     €r'   r7   ÚMySQLDialect_mysqldb.__init__Ž   s^   ø€ Ü‰ÒÑ"˜6Ò"ð �z‰zÑ%¬'°$·*±*¸m×*LÑ*Lð ×%Ñ% d§j¡j×&<Ñ&<Ó=ð 	Õ!ð ð 	Õ!r&   c                ó†   • [         R                  " SU5      nU(       a#  [        S UR                  SSS5       5       5      $ g)Nz(\d+)\.(\d+)(?:\.(\d+))?c              3  ó>   #   • U H  oc  M  [        U5      v •  M     g 7f©N)Úint)Ú.0Úxs     r'   Ú	<genexpr>Ú<MySQLDialect_mysqldb._parse_dbapi_version.<locals>.<genexpr>™   s   é € ÐKÑ)9 A›œ˜QŸ˜Ò)9ùs   ‚‹r   é   r   r5   )ÚreÚmatchÚtupleÚgroup)r<   ÚversionÚms      r'   r:   Ú)MySQLDialect_mysqldb._parse_dbapi_version–   s7   € Ü�HŠHÐ0°'Ó:ˆÞÜÑK¨¯©°°A°qÔ)9ÓKÓKÐKàr&   c                ó~   •  [        S5      R                  nUR                  U l        g! [        [
        4 a     gf = f)NzMySQLdb.cursorsTF)Ú
__import__ÚcursorsÚSSCursorÚ	_sscursorÚImportErrorÚAttributeError)r<   rR   s     r'   Úsupports_server_side_cursorsÚ1MySQLDialect_mysqldb.supports_server_side_cursors�   s?   € ð	Ü Ð!2Ó3×;Ñ;ˆGØ$×-Ñ-ˆDŒNØøÜœ^Ð,ó 	Ùð	ús   ‚&) ©<»<c                ó   • [        S5      $ )NÚMySQLdb)rQ   )Úclss    r'   Úimport_dbapiÚ!MySQLDialect_mysqldb.import_dbapi¦   s   € ä˜)Ó$Ð$r&   c                ó6   >^• [         TU ]  5       mSU4S jjnU$ )Nc                ó¬   >• Tb  T" U 5        U R                  5       nUb5  U R                  5       nUR                  SU-  5        UR                  5         g g )NzSET NAMES %s)Úcharacter_set_nameÚcursorÚexecuteÚclose)ÚconnÚcharset_namera   Úsuper_s      €r'   Ú
on_connectÚ3MySQLDialect_mysqldb.on_connect.<locals>.on_connect­   sN   ø€ ØÑ!Ù�t”à×2Ñ2Ó4ˆLàÑ'ØŸ™›�Ø—‘˜~°Ñ<Ô=Ø—‘•ð (r&   )rd   r   ÚreturnÚNone)r6   rg   )r<   rg   rf   r>   s     @€r'   rg   ÚMySQLDialect_mysqldb.on_connectª   s   ù€ Ü‘Ñ#Ó%ˆ÷		ð Ðr&   c                ó$   • UR                  5         g)NT)Úping)r<   Údbapi_connections     r'   Údo_pingÚMySQLDialect_mysqldb.do_pingº   s   € Ø×ÑÔØr&   c                óX   • UR                  X#5      nUb  U[        [        U5      l        g g rB   )Úexecutemanyr   r   Ú	_rowcount)r<   ra   Ú	statementÚ
parametersÚcontextÚrowcounts         r'   Údo_executemanyÚ#MySQLDialect_mysqldb.do_executemany¾   s/   € ð ×%Ñ% iÓ<ˆØÑØ=EŒDÔ&¨Ó0Õ:ð r&   c                óz  • Uc  [        SSSS9nUR                  " S0 UD6nUR                  UR                  5        [        R
                  " US[        5        [        R
                  " US[        5        [        R
                  " US[        5        [        R
                  " US[        5        [        R
                  " US	[        5        [        R
                  " US
[        5        [        R
                  " US[        5        [        R
                  " US[        5        0 nS[        4S[        4S[        4S[        4S[        4S[        4/nU H1  u  pgXc;   d  M  X6   XFSS  '   [        R
                  " XFSS  U5        X6	 M3     U(       a  XCS'   UR                  S	S5      nU R                  5       n	U	b  X‰-  nXƒS	'   / U4$ )NÚdbÚuserÚpasswd)ÚdatabaseÚusernameÚpasswordÚcompressÚconnect_timeoutÚread_timeoutÚwrite_timeoutÚclient_flagÚlocal_infileÚuse_unicodeÚcharsetÚssl_caÚssl_keyÚssl_certÚ
ssl_capathÚ
ssl_cipherÚssl_check_hostnameé   Ússlr   r   )ÚdictÚtranslate_connect_argsÚupdateÚqueryr   Úcoerce_kw_typeÚboolrC   ÚstrÚgetÚ_found_rows_client_flag)
r<   ÚurlÚ_translate_argsÚoptsr�   ÚkeysÚkeyÚkw_typer…   Úclient_flag_found_rowss
             r'   Úcreate_connect_argsÚ(MySQLDialect_mysqldb.create_connect_argsÉ   s™  € ð Ñ"Ü"Ø¨¸ñˆOð ×)Ò)Ñ<¨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Ø�{Ø#™y�˜˜�G‘Ü×#Ò# C¨Q¨R¨°'Ô:Ø’Iñ	 !ö
 Ø�‰Kð —h‘h˜}¨aÓ0ˆà!%×!=Ñ!=Ó!?ÐØ!Ñ-ØÑ1ˆKØ"-�ÑØ�4ˆxˆr&   c                óÐ   • U R                   bC   [        U R                   R                  S-   5      R                  R                  nUR
                  $ g ! [        [        4 a     g f = f)Nz.constants.CLIENT)r8   rQ   r!   Ú	constantsÚCLIENTÚ
FOUND_ROWSrV   rU   )r<   ÚCLIENT_FLAGSs     r'   r™   Ú,MySQLDialect_mysqldb._found_rows_client_flagþ   sd   € Ø�:‰:Ñ!ð/Ü)Ø—J‘J×'Ñ'Ð*=Ñ=ó ç‘)ŸF™Fð ð $×.Ñ.Ð.àøô #¤KÐ0ó Ùðús   �6A ÁA%Á$A%c                ó    • UR                   S   $ )Nr   )Úargs)r<   Ú	exceptions     r'   Ú_extract_error_codeÚ(MySQLDialect_mysqldb._extract_error_code  s   € Ø�~‰~˜aÑ Ð r&   c                óŠ   •  UR                   R                  nU" 5       $ ! [         a    [        R                  " S5         gf = f)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)Ú
connectionr`   rV   r   Úwarn)r<   r°   Ú	cset_names      r'   Ú_detect_charsetÚ$MySQLDialect_mysqldb._detect_charset  sN   € ð	ð
 ×%Ñ%×8Ñ8ð ñ “;Ðøô ó 	Ü�IŠIð#ôñ ð	ús   ‚ Ÿ AÁAc                ó   • g)N)ÚSERIALIZABLEzREAD UNCOMMITTEDzREAD COMMITTEDzREPEATABLE READÚ
AUTOCOMMITr   ©r<   Ú
dbapi_conns     r'   Úget_isolation_level_valuesÚ/MySQLDialect_mysqldb.get_isolation_level_values#  s   € ð
r&   c                ó"   • UR                  5       $ rB   )Úget_autocommitr¸   s     r'   Údetect_autocommit_settingÚ.MySQLDialect_mysqldb.detect_autocommit_setting.  s   € Ø×(Ñ(Ó*Ð*r&   c                óv   >• US:X  a  UR                  S5        g UR                  S5        [        TU ]	  X5        g )Nr·   TF)Ú
autocommitr6   Úset_isolation_level)r<   rn   Úlevelr>   s      €r'   rÂ   Ú(MySQLDialect_mysqldb.set_isolation_level1  s7   ø€ ð �LÓ Ø×'Ñ'¨Õ-à×'Ñ'¨Ô.Ü‰GÑ'Ð(8Õ@r&   )r;   rT   )r=   r   )rM   r—   ri   r1   )ri   r–   )ri   r   )ri   z!Callable[[DBAPIConnection], None])rn   r   ri   zLiteral[True]rB   )
ra   r   rt   r—   ru   r   rv   zOptional[ExecutionContext]ri   rj   )rš   r   r›   zOptional[Dict[str, Any]]ri   r   )ri   zOptional[int])r«   zDBAPIModule.Errorri   rC   )r°   r   ri   r—   )r¹   r   ri   zTuple[IsolationLevel, ...])r¹   r   ri   r–   )rn   r   rÃ   r   ri   rj   )&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   ÚpreparerÚ__annotations__r7   r:   r   ÚlanghelpersÚmemoized_propertyrW   Úclassmethodr\   rg   ro   rx   r¡   r™   r¬   r³   rº   r¾   rÂ   r%   Ú__classcell__)r>   s   @r'   r-   r-      s@  ø‡ Ø€FØ#ÐØ"&ÐØ!ÐØ#'Ð à"Ðà!ÐØ5ÐØ.ÐØ&€HØ(Ó(÷
ôð 
×Ñ×'Ñ'óó (ðð ó%ó ð%÷ô ð /3ð	Fàð	Fð ð	Fð -ð		Fð
 ,ð	Fð 
õ	Fð EIð3Øð3Ø)Að3à	õ3ôjô!ôð*	
Ø)ð	
à	#ô	
ô+ðAØ /ðAØ8FðAà	÷Aõ Ar&   r-   )%Ú__doc__Ú
__future__r   rI   Útypingr   r   r   r   r   r	   r
   Úbaser   r   r   r   Ú r   Úutil.typingr   Úengine.baser   Úengine.interfacesr   r   r   r   r   r   r   Ú
engine.urlr   r   r*   r-   Údialectr   r&   r'   Ú<module>rÞ      sŠ   ðñNõ` #ã 	Ý Ý Ý Ý Ý Ý Ý  å Ý Ý 'Ý )Ý Ý "æå)Ý=Ý4Ý4Ý0Ý0Ý5Ý3Ý!ô	Ð$9ô 	ô	˜Mô 	ôyA˜<ô yAðx �r&   