+
    }¯³jØ&  ã                  ó|  € R t ^ RIHt ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIH	t	 ^ RIH
t
 ^ R	IHt ^R
IHt ^RIHt ^RIHt ^RIHt ^RIHt ^RIHt ]'       d7   ^RIHt ^RIHt ^RIHt ^RIHt ^RIHt ^RIHt ^RIHt ^RIHt ^RIH t   ! R R]4      t! ! R R]4      t" ! R R]4      t#]#t$R# )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                  ó   € ] tR t^wtRtR# )ÚMySQLExecutionContext_mysqldb© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    Úb/home/luca/screen-checking/.venv/lib/python3.14/site-packages/sqlalchemy/dialects/mysql/mysqldb.pyr   r   w   ó   † Ûr"   r   c                  ó   € ] tR t^{tRtR# )ÚMySQLCompiler_mysqldbr   Nr   r   r"   r#   r&   r&   {   r$   r"   r&   c                  óN  a € ] tR t^t$ RtRtRtRtRtRt	Rt
]t]t]tR]R&   R V 3R lltR R	 lt]P*                  P,                  R
 R l4       t]R R l4       tR V 3R lltR R ltR#R R lltR#R R lltR R ltR R ltR R lt R R lt!R R lt"R  V 3R! llt#R"t$V ;t%# )$ÚMySQLDialect_mysqldbÚmysqldbTÚformatúTuple[int, ...]Úserver_version_infoc               ó   € V ^8„  d   QhRR/# )é   Úkwargsr   r   )r*   s   "r#   Ú__annotate__Ú!MySQLDialect_mysqldb.__annotate__Ž   s   € ÷ 
ñ 
 ñ 
r"   c                	óâ   <€ \         SV `  ! R/ VB  V P                  eI   \        V P                  R4      '       d-   V P	                  V P                  P
                  4      V n        R # RV n        R # )NÚ__version__r   ©é    r5   r5   )ÚsuperÚ__init__ÚdbapiÚhasattrÚ_parse_dbapi_versionr3   Ú_mysql_dbapi_version)Úselfr/   Ú	__class__s   &,€r#   r7   ÚMySQLDialect_mysqldb.__init__Ž   s^   ø€ Ü‰ÒÑ"˜6Ò"ð �z‰zÒ%¬'°$·*±*¸m×*LÒ*Lð ×%Ñ% d§j¡j×&<Ñ&<Ó=ð 	Ö!ð ð 	Ö!r"   c               ó    € V ^8„  d   QhRRRR/# )r.   ÚversionÚstrÚreturnr+   r   )r*   s   "r#   r0   r1   –   s   € ÷ ñ ¨Cð °Oñ r"   c                	óà   € \         P                  ! R V4      pV'       dO   \        ;QJ d%    . R VP                  ^^^4       4       F  NK  	  5# ! R VP                  ^^^4       4       4      # R# )z(\d+)\.(\d+)(?:\.(\d+))?c              3  óB   "  € T F  qf   K  \        V4      x € K  	  R # 5i©N)Úint)Ú.0Úxs   & r#   Ú	<genexpr>Ú<MySQLDialect_mysqldb._parse_dbapi_version.<locals>.<genexpr>™   s   é € ÐKÑ)9 Aœœ˜QŸ˜Ó)9ùs   ‚Œr4   )ÚreÚmatchÚtupleÚgroup)r<   r@   Úms   && r#   r:   Ú)MySQLDialect_mysqldb._parse_dbapi_version–   sX   € Ü�HŠHÐ0°'Ó:ˆßß”5ÑK¨¯©°°A°qÔ)9ÓK—5ÐK�5ÑK¨¯©°°A°qÔ)9ÓKÓKÐKàÐr"   c               ó   € V ^8„  d   QhRR/# )r.   rB   Úboolr   )r*   s   "r#   r0   r1   ž   s   € ÷ ñ ¨dñ r"   c                	ó„   €  \        R 4      P                  pVP                  V n        R#   \        \
        3 d     R# i ; i)zMySQLdb.cursorsTF)Ú
__import__ÚcursorsÚSSCursorÚ	_sscursorÚImportErrorÚAttributeError)r<   rU   s   & r#   Úsupports_server_side_cursorsÚ1MySQLDialect_mysqldb.supports_server_side_cursors�   s?   € ð	Ü Ð!2Ó3×;Ñ;ˆGØ$×-Ñ-ˆDŒNÙøÜœ^Ð,ô 	Úð	ús   ‚&* ª?¾?c               ó   € V ^8„  d   QhRR/# )r.   rB   r   r   )r*   s   "r#   r0   r1   §   s   € ÷ %ñ %˜[ñ %r"   c                	ó   € \        R 4      # )ÚMySQLdb)rT   )Úclss   &r#   Úimport_dbapiÚ!MySQLDialect_mysqldb.import_dbapi¦   s   € ä˜)Ó$Ð$r"   c               ó   € V ^8„  d   QhRR/# )r.   rB   z!Callable[[DBAPIConnection], None]r   )r*   s   "r#   r0   r1   ª   s   € ÷ ñ Ð=ñ r"   c                	ó8   <a€ \         SV `  4       oR  V3R llpV# )c               ó    € V ^8„  d   QhRRRR/# )r.   Úconnr   rB   ÚNoner   )r*   s   "r#   r0   Ú5MySQLDialect_mysqldb.on_connect.<locals>.__annotate__­   s   € ÷ 		ñ 		˜_ð 		°ñ 		r"   c                ó¼   <€ Se	   S! V 4       V P                  4       pVe;   V P                  4       pVP                  RV,          4       VP                  4        R # R # )NzSET NAMES %s)Úcharacter_set_nameÚcursorÚexecuteÚclose)re   Úcharset_namerj   Úsuper_s   &  €r#   Ú
on_connectÚ3MySQLDialect_mysqldb.on_connect.<locals>.on_connect­   sN   ø€ ØÒ!Ù�t”à×2Ñ2Ó4ˆLàÒ'ØŸ™›�Ø—‘˜~°Õ<Ô=Ø—‘–ñ (r"   )r6   ro   )r<   ro   rn   r=   s   & @€r#   ro   ÚMySQLDialect_mysqldb.on_connectª   s"   ù€ Ü‘Ñ#Ó%ˆ÷		ð 		ð Ðr"   c               ó    € V ^8„  d   QhRRRR/# )r.   Údbapi_connectionr   rB   zLiteral[True]r   )r*   s   "r#   r0   r1   º   s   € ÷ ñ ¨ð ¸Mñ r"   c                	ó&   € VP                  4        R # )T)Úping)r<   rs   s   &&r#   Údo_pingÚMySQLDialect_mysqldb.do_pingº   s   € Ø×ÑÔÙr"   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r.   rj   r   Ú	statementrA   Ú
parametersr   ÚcontextzOptional[ExecutionContext]rB   rf   r   )r*   s   "r#   r0   r1   ¾   sC   € ÷ 	Fñ 	Fàð	Fð ð	Fð -ð		Fð
 ,ð	Fð 
ñ	Fr"   c                	ó^   € VP                  W#4      pVe   V\        \        V4      n        R # R # rE   )Úexecutemanyr   r   Ú	_rowcount)r<   rj   ry   rz   r{   Úrowcounts   &&&&& r#   Údo_executemanyÚ#MySQLDialect_mysqldb.do_executemany¾   s/   € ð ×%Ñ% iÓ<ˆØÒØ=EŒDÔ&¨Ó0Ö:ñ r"   c               ó$   € V ^8„  d   QhRRRRRR/# )r.   Úurlr   Ú_translate_argszOptional[Dict[str, Any]]rB   r   r   )r*   s   "r#   r0   r1   É   s$   € ÷ 3ñ 3Øð3Ø)Að3à	ñ3r"   c                	ó¨  € Vf   \        RRRR7      pVP                  ! R/ VB pVP                  VP                  4       \        P
                  ! VR\        4       \        P
                  ! VR\        4       \        P
                  ! VR\        4       \        P
                  ! VR\        4       \        P
                  ! VR	\        4       \        P
                  ! VR
\        4       \        P
                  ! VR\        4       \        P
                  ! VR\        4       / pR\        3R\        3R\        3R\        3R\        3R\        3.pV F>  w  rgWc9   g   K  W6,          WFR,          &   \        P
                  ! WFR,          V4       W6 K@  	  V'       d   WCR&   VP                  R	^ 4      pV P                  4       p	V	e   W‰,          pWƒR	&   . V3# )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:é   NNÚsslr   )ÚdictÚtranslate_connect_argsÚupdateÚqueryr   Úcoerce_kw_typerR   rF   rA   ÚgetÚ_found_rows_client_flag)
r<   rƒ   r„   Ú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¨R­°'Ô:Ø’Iñ	 !÷
 Ø�‰Kð —h‘h˜}¨aÓ0ˆà!%×!=Ñ!=Ó!?ÐØ!Ò-ØÕ1ˆKØ"-�ÑØ�4ˆxˆr"   c               ó   € V ^8„  d   QhRR/# )r.   rB   zOptional[int]r   )r*   s   "r#   r0   r1   þ   s   € ÷ ñ ¨ñ r"   c                	óà   € V P                   eH    \        V P                   P                  R,           4      P                  P                  pVP
                  # R #   \        \        3 d     R # i ; i)Nz.constants.CLIENT)r8   rT   r   Ú	constantsÚCLIENTÚ
FOUND_ROWSrY   rX   )r<   ÚCLIENT_FLAGSs   & r#   r¢   Ú,MySQLDialect_mysqldb._found_rows_client_flagþ   sd   € Ø�:‰:Ò!ð/Ü)Ø—J‘J×'Ñ'Ð*=Õ=ó ç‘)ŸF™Fð ð $×.Ñ.Ð.áøô #¤KÐ0ô Úðús   �:A ÁA-Á,A-c               ó    € V ^8„  d   QhRRRR/# )r.   Ú	exceptionzDBAPIModule.ErrorrB   rF   r   )r*   s   "r#   r0   r1     s   € ÷ !ñ !Ð->ð !À3ñ !r"   c                	ó(   € VP                   ^ ,          # )r5   )Úargs)r<   r²   s   &&r#   Ú_extract_error_codeÚ(MySQLDialect_mysqldb._extract_error_code  s   € Ø�~‰~˜aÕ Ð r"   c               ó    € V ^8„  d   QhRRRR/# )r.   Ú
connectionr   rB   rA   r   )r*   s   "r#   r0   r1     s   € ÷ ñ ¨*ð ¸ñ r"   c                óŽ   €  VP                   P                  pV! 4       #   \         d    \        P                  ! R4        R# i ; i)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)r¸   ri   rY   r   Úwarn)r<   r¸   Ú	cset_names   && r#   Ú_detect_charsetÚ$MySQLDialect_mysqldb._detect_charset  sN   € ð	ð
 ×%Ñ%×8Ñ8ð ñ “;Ðøô ô 	Ü�IŠIð#ôò ð	ús   ‚ Ÿ!AÁAc               ó    € V ^8„  d   QhRRRR/# )r.   Ú
dbapi_connr   rB   zTuple[IsolationLevel, ...]r   )r*   s   "r#   r0   r1   #  s   € ÷ 	
ñ 	
Ø)ð	
à	#ñ	
r"   c                	ó   € R# )ÚSERIALIZABLE)rÂ   zREAD UNCOMMITTEDzREAD COMMITTEDzREPEATABLE READÚ
AUTOCOMMITr   ©r<   rÀ   s   &&r#   Úget_isolation_level_valuesÚ/MySQLDialect_mysqldb.get_isolation_level_values#  s   € ð
ð 	
r"   c               ó    € V ^8„  d   QhRRRR/# )r.   rÀ   r   rB   rR   r   )r*   s   "r#   r0   r1   .  s   € ÷ +ñ +°Oð +Èñ +r"   c                	ó"   € VP                  4       # rE   )Úget_autocommitrÄ   s   &&r#   Údetect_autocommit_settingÚ.MySQLDialect_mysqldb.detect_autocommit_setting.  s   € Ø×(Ñ(Ó*Ð*r"   c               ó$   € V ^8„  d   QhRRRRRR/# )r.   rs   r   Úlevelr   rB   rf   r   )r*   s   "r#   r0   r1   1  s)   € ÷ Añ AØ /ðAØ8FðAà	ñAr"   c                	ó|   <€ VR 8X  d   VP                  R4       R# VP                  R4       \        SV `	  W4       R# )rÃ   TFN)Ú
autocommitr6   Úset_isolation_level)r<   rs   rÍ   r=   s   &&&€r#   rÐ   Ú(MySQLDialect_mysqldb.set_isolation_level1  s7   ø€ ð �LÔ Ø×'Ñ'¨Ö-à×'Ñ'¨Ô.Ü‰GÑ'Ð(8Ö@r"   )r;   rW   rE   )&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_propertyrZ   Úclassmethodr`   ro   rv   r€   r¨   r¢   rµ   r½   rÅ   rÊ   rÐ   r!   Ú__classcell__)r=   s   @r#   r(   r(      sÆ   ø‡ Ø€FØ#ÐØ"&ÐØ!ÐØ#'Ð à"Ðà!ÐØ5ÐØ.ÐØ&€HØ(Ó(÷
ð 
õð 
×Ñ×'Ñ'ôó (ðð ô%ó ð%÷ð õ ÷	F÷3õjõ!õõ*	
õ+÷Aö Ar"   r(   )%Ú__doc__Ú
__future__r   rK   Ú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"   