+
    i(                    |   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^vtRtR# )MySQLExecutionContext_mysqldb N__name__
__module____qualname____firstlineno____static_attributes__r       {C:\Users\petid\OneDrive\Desktop\Maestro\MAESTRO\maestro-backend\venv\Lib\site-packages\sqlalchemy/dialects/mysql/mysqldb.pyr   r   v       r"   r   c                      ] tR t^ztRtR# )MySQLCompiler_mysqldbr   Nr   r   r"   r#   r&   r&   z   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" zz%'$**m*L*L %%djj&<&<= 	!  	!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)9AQ)9s   r4   )rematchtuplegroup)r<   r@   ms   && r#   r:   )MySQLDialect_mysqldb._parse_dbapi_version   sX    HH0':5KAq)9K5K5KAq)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_cursors1MySQLDialect_mysqldb.supports_server_side_cursors   s?    	 !23;;G$--DN^, 		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_connect3MySQLDialect_mysqldb.on_connect.<locals>.on_connect   sN    !t224L'~<= (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<=ED&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WR	&   . 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<CIID*d3D"3S9D.#6D/37D-5D.$7 	D-6D)S1
 sO33!4(
 !LC{#yG##CR':I	 !
 K hh}a0!%!=!=!?!-1K"-4x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    ::!/)JJ''*== )FF  $... #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.zNo '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  ;  	II# 	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   0  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_level0  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"   