
    Wd                     B    d Z ddlmZ ddlmZ  G d de          ZeZdS )a  

.. dialect:: mysql+pymysql
    :name: PyMySQL
    :dbapi: pymysql
    :connectstring: mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
    :url: https://pymysql.readthedocs.io/

Unicode
-------

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

.. _pymysql_ssl:

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

The PyMySQL DBAPI accepts the same SSL arguments as that of MySQLdb,
described at :ref:`mysqldb_ssl`.   See that section for additional examples.

If the server uses an automatically-generated certificate that is self-signed
or does not match the host name (as seen from the client), it may also be
necessary to indicate ``ssl_check_hostname=false`` in PyMySQL::

    connection_uri = (
        "mysql+pymysql://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"
        "&ssl_check_hostname=false"
    )


MySQL-Python Compatibility
--------------------------

The pymysql DBAPI is a pure Python port of the MySQL-python (MySQLdb) driver,
and targets 100% compatibility.   Most behavioral notes for MySQL-python apply
to the pymysql driver as well.

   )MySQLDialect_mysqldb   )langhelpersc                   r     e Zd ZdZdZdZej        d             Ze	d             Z
d	 fd	Z fdZd Z xZS )
MySQLDialect_pymysqlpymysqlTNc                 x    	 t          d          j        }|j        | _        dS # t          t
          f$ r Y dS w xY w)Nzpymysql.cursorsTF)
__import__cursorsSSCursor	_sscursorImportErrorAttributeError)selfr   s     ]/var/www/html/t/fyr/venv311/lib/python3.11/site-packages/sqlalchemy/dialects/mysql/pymysql.pysupports_server_side_cursorsz1MySQLDialect_pymysql.supports_server_side_cursors@   sN    	 !233;G$-DN4^, 	 	 	55	s    $ 99c                      t          d          S )Nr   )r
   )clss    r   import_dbapiz!MySQLDialect_pymysql.import_dbapiI   s    )$$$    c                 n    |t          d          }t                                          ||          S )Nuser)username)_translate_args)dictsupercreate_connect_args)r   urlr   	__class__s      r   r   z(MySQLDialect_pymysql.create_connect_argsM   s?    ""F333Oww** + 
 
 	
r   c                     t                                          |||          rdS t          || j        j                  r)t          |                                          }d|v pd|v S dS )NTzalready closedzconnection was killedF)r   is_disconnect
isinstancedbapiErrorstrlower)r   e
connectioncursorstr_er   s        r   r!   z"MySQLDialect_pymysql.is_disconnectT   so    77  J77 	44:+,, 	FFLLNNE E)M-D-M 5r   c                 v    t          |j        d         t                    r|j        d         }|j        d         S )N    )r"   args	Exception)r   	exceptions     r   _extract_error_codez(MySQLDialect_pymysql._extract_error_code_   s4    inQ'33 	*!q)I~a  r   )N)__name__
__module____qualname__driversupports_statement_cachedescription_encodingr   memoized_propertyr   classmethodr   r   r!   r0   __classcell__)r   s   @r   r   r   :   s        F#"  #" % % [%
 
 
 
 
 
	 	 	 	 	! ! ! ! ! ! !r   r   N)__doc__mysqldbr   utilr   r   dialect r   r   <module>r?      sm   * *X * ) ) ) ) )      (! (! (! (! (!/ (! (! (!V r   