+
    }¯³jø  ã                  óJ  € R t ^ RIHt ^ RI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 ]
'       d   ^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# )aH  

.. dialect:: mysql+pyodbc
    :name: PyODBC
    :dbapi: pyodbc
    :connectstring: mysql+pyodbc://<username>:<password>@<dsnname>
    :url: https://pypi.org/project/pyodbc/

.. note::

    The PyODBC for MySQL dialect is **not tested as part of
    SQLAlchemy's continuous integration**.
    The recommended MySQL dialects are mysqlclient and PyMySQL.
    However, if you want to use the mysql+pyodbc dialect and require
    full support for ``utf8mb4`` characters (including supplementary
    characters like emoji) be sure to use a current release of
    MySQL Connector/ODBC and specify the "ANSI" (**not** "Unicode")
    version of the driver in your DSN or connection string.

Pass through exact pyodbc connection string::

    import urllib

    connection_string = (
        "DRIVER=MySQL ODBC 8.0 ANSI Driver;"
        "SERVER=localhost;"
        "PORT=3307;"
        "DATABASE=mydb;"
        "UID=root;"
        "PWD=(whatever);"
        "charset=utf8mb4;"
    )
    params = urllib.parse.quote_plus(connection_string)
    connection_uri = "mysql+pyodbc:///?odbc_connect=%s" % params

)ÚannotationsN)ÚAny)ÚCallable)ÚOptional)ÚTuple)ÚTYPE_CHECKING)ÚUnion)ÚMySQLDialect)ÚMySQLExecutionContext)ÚTIME)Úexc)Úutil)ÚPyODBCConnector)ÚTime)Ú
Connection)ÚDBAPIConnection)ÚDialect)Ú_ResultProcessorTypec                  ó"   € ] tR t^HtR R ltRtR# )Ú_pyodbcTIMEc               ó$   € V ^8„  d   QhRRRRRR/# )é   Údialectr   ÚcoltypeÚobjectÚreturnz#_ResultProcessorType[datetime.time]© )Úformats   "Úa/home/luca/screen-checking/.venv/lib/python3.14/site-packages/sqlalchemy/dialects/mysql/pyodbc.pyÚ__annotate__Ú_pyodbcTIME.__annotate__I   s$   € ÷ ñ ØðØ)/ðà	,ñó    c                	ó   € R  R lpV# )c               ó    € V ^8„  d   QhRRRR/# )r   Úvaluer   r   zUnion[datetime.time, None]r   )r   s   "r   r   Ú2_pyodbcTIME.result_processor.<locals>.__annotate__L   s   € ÷ 	ñ 	˜3ð 	Ð#=ñ 	r!   c                ó   € V # ©Nr   )r$   s   &r   ÚprocessÚ-_pyodbcTIME.result_processor.<locals>.processL   s   € àˆLr!   r   )Úselfr   r   r(   s   &&& r   Úresult_processorÚ_pyodbcTIME.result_processorI   s   € õ	ð ˆr!   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r+   Ú__static_attributes__r   r!   r   r   r   H   s   † ÷ñ r!   r   c                  ó"   € ] tR t^StR R ltRtR# )ÚMySQLExecutionContext_pyodbcc               ó   € V ^8„  d   QhRR/# )r   r   Úintr   )r   s   "r   r   Ú)MySQLExecutionContext_pyodbc.__annotate__T   s   € ÷ ñ ˜sñ r!   c                	ó–   € V P                  4       pVP                  R 4       VP                  4       ^ ,          pVP                  4        V# )zSELECT LAST_INSERT_ID())Úcreate_cursorÚexecuteÚfetchoneÚclose)r*   ÚcursorÚ	lastrowids   &  r   Úget_lastrowidÚ*MySQLExecutionContext_pyodbc.get_lastrowidT   s=   € Ø×#Ñ#Ó%ˆØ�‰Ð0Ô1Ø—O‘OÓ% aÕ(ˆ	Ø�‰ŒØÐr!   r   N)r-   r.   r/   r0   r>   r1   r   r!   r   r3   r3   S   s   † ÷ñ r!   r3   c                  ó    a € ] tR t^\tRt]P                  ! ]P                  ]	]
/4      tRt]tR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_pyodbcTÚMySQLc               ó    € V ^8„  d   QhRRRR/# )r   Ú
connectionr   r   Ústrr   )r   s   "r   r   Ú MySQLDialect_pyodbc.__annotate__d   s   € ÷ ñ ¨*ð ¸ñ r!   c                ó²   € RV n          V P                  VR4      pV'       d   V#  \        P
                  ! R4       R#   \        P                   d     L/i ; i)z:Sniff out the character set in use for connection results.NÚcharacter_set_clientz@Could not detect the connection character set.  Assuming latin1.Úlatin1)Ú_connection_charsetÚ_fetch_settingr   Ú
DBAPIErrorr   Úwarn)r*   rD   r$   s   && r   Ú_detect_charsetÚ#MySQLDialect_pyodbc._detect_charsetd   sa   € ð $(ˆÔ ð	Ø×'Ñ'¨
Ð4JÓKˆEßØ�ð ô
 	�	Š	ðô	
ñ øô �~‰~ô 	Ùð	ús   ‰> £> ¾AÁAc               ó    € V ^8„  d   QhRRRR/# )r   rD   r   r   zTuple[int, ...]r   )r   s   "r   r   rF   }   s    € ÷ Gñ GØ$ðGà	ñGr!   c                	ó.   € \         P                  ! W4      # r'   )r	   Ú_get_server_version_info)r*   rD   s   &&r   rR   Ú,MySQLDialect_pyodbc._get_server_version_info}   s   € ô ×4Ò4°TÓFÐFr!   c               ó    € V ^8„  d   QhRRRR/# )r   Ú	exceptionÚBaseExceptionr   zOptional[int]r   )r   s   "r   r   rF   ‚   s   € ÷ ñ ¨]ð ¸}ñ r!   c                	óÊ   € \         P                  ! R 4      P                  \        VP                  4      4      pVf   R# VP                  ^4      pV'       d   \        V4      # R# )z	\((\d+)\)N)ÚreÚcompileÚsearchrE   ÚargsÚgroupr5   )r*   rU   ÚmÚcs   &&  r   Ú_extract_error_codeÚ'MySQLDialect_pyodbc._extract_error_code‚   sH   € Ü�JŠJ�|Ó$×+Ñ+¬C°	·±Ó,?Ó@ˆØŠ9ÙØŸ7™7 1›:ˆßÜ�q“6ˆMár!   c               ó   € V ^8„  d   QhRR/# )r   r   z!Callable[[DBAPIConnection], None]r   )r   s   "r   r   rF   Œ   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   r   ÚNoner   )r   s   "r   r   Ú4MySQLDialect_pyodbc.on_connect.<locals>.__annotate__�   s   € ÷ 
	/ñ 
	/˜_ð 
	/°ñ 
	/r!   c                ó˜   <€ Se	   S! V 4       ^pRpV P                  VRR7       V P                  VRR7       V P                  RR7       R # )Nzutf-8)Úencodingiøÿÿÿ)ÚsetdecodingÚsetencoding)rd   Úpyodbc_SQL_CHARÚpyodbc_SQL_WCHARÚsuper_s   &  €r   Ú
on_connectÚ2MySQLDialect_pyodbc.on_connect.<locals>.on_connect�   sU   ø€ ØÒ!Ù�t”ð  ˆOØ!ÐØ×Ñ˜_°wÐÔ?Ø×ÑÐ-¸ÐÔ@Ø×Ñ gÐÖ.r!   )Úsuperrn   )r*   rn   rm   Ú	__class__s   & @€r   rn   ÚMySQLDialect_pyodbc.on_connectŒ   s"   ù€ Ü‘Ñ#Ó%ˆ÷
	/ð 
	/ð Ðr!   )rJ   )r-   r.   r/   r0   Úsupports_statement_cacher   Úupdate_copyr	   Úcolspecsr   r   Úsupports_unicode_statementsr3   Úexecution_ctx_clsÚpyodbc_driver_namerN   rR   r_   rn   r1   Ú__classcell__)rq   s   @r   rA   rA   \   sR   ø† Ø#ÐØ×Ò × 5Ñ 5¸¸kÐ7JÓK€HØ"&ÐØ4Ðà Ðõõ2Gõ
÷ö r!   rA   )#Ú__doc__Ú
__future__r   ÚdatetimerX   Útypingr   r   r   r   r   r   Úbaser	   r
   Útypesr   Ú r   r   Úconnectors.pyodbcr   Úsql.sqltypesr   Úenginer   Úengine.interfacesr   r   Úsql.type_apir   r   r3   rA   r   r   r!   r   Ú<module>r†      s{   ðñ#õJ #ã Û 	Ý Ý Ý Ý Ý  Ý å Ý 'Ý Ý Ý Ý 0Ý  çÝ$Ý4Ý,Ý4ô�$ô ôÐ#8ô ô?˜/¨<ô ?ðD ‚r!   