Ñò
¿Š›Mc        	   @   sú   d  Z  d d k Z d d k l Z l Z l Z l Z d d k l Z	 l
 Z
 d d k l Z d d k l Z l Z l Z l Z l Z l Z d d k l Z d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ e Z d S(   sA  Support for the MySQL database via the MySQL-python adapter.

MySQL-Python is available at:

    http://sourceforge.net/projects/mysql-python

At least version 1.2.1 or 1.2.2 should be used.

Connecting
-----------

Connect string format::

    mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>

Character Sets
--------------

Many MySQL server installations default to a ``latin1`` encoding for client
connections.  All data sent through the connection will be converted into
``latin1``, even if you have ``utf8`` or another character set on your tables
and columns.  With versions 4.1 and higher, you can change the connection
character set either through server configuration or by including the
``charset`` parameter in the URL used for ``create_engine``.  The ``charset``
option is passed through to MySQL-Python and has the side-effect of also
enabling ``use_unicode`` in the driver by default.  For regular encoded
strings, also pass ``use_unicode=0`` in the connection arguments::

  # set client encoding to utf8; all strings come back as unicode
  create_engine('mysql+mysqldb:///mydb?charset=utf8')

  # set client encoding to utf8; all strings come back as utf8 str
  create_engine('mysql+mysqldb:///mydb?charset=utf8&use_unicode=0')

Known Issues
-------------

MySQL-python at least as of version 1.2.2 has a serious memory leak related
to unicode conversion, a feature which is disabled via ``use_unicode=0``.
The recommended connection form with SQLAlchemy is::

    engine = create_engine('mysql://scott:tiger@localhost/test?charset=utf8&use_unicode=0', pool_recycle=3600)


iÿÿÿÿN(   t   MySQLDialectt   MySQLExecutionContextt   MySQLCompilert   MySQLIdentifierPreparer(   t   baset   default(   t	   operators(   t   exct   logt   schemat   sqlt   typest   util(   t
   processorst   MySQLExecutionContext_mysqldbc           B   s   e  Z e d  „  ƒ Z RS(   c         C   s&   t  |  d ƒ o |  i S|  i i Sd  S(   Nt	   _rowcount(   t   hasattrR   t   cursort   rowcount(   t   self(    (    sl   p:\graphics\tools\python26\lib\site-packages\sqlalchemy-0.6.6-py2.6.egg\sqlalchemy\dialects\mysql\mysqldb.pyR   @   s    (   t   __name__t
   __module__t   propertyR   (    (    (    sl   p:\graphics\tools\python26\lib\site-packages\sqlalchemy-0.6.6-py2.6.egg\sqlalchemy\dialects\mysql\mysqldb.pyR   >   s   t   MySQLCompiler_mysqldbc           B   s   e  Z d  „  Z d „  Z RS(   c         K   s$   |  i  | i ƒ d |  i  | i ƒ S(   Ns    %% (   t   processt   leftt   right(   R   t   binaryt   kw(    (    sl   p:\graphics\tools\python26\lib\site-packages\sqlalchemy-0.6.6-py2.6.egg\sqlalchemy\dialects\mysql\mysqldb.pyt	   visit_modI   s    c         C   s   | i  d d ƒ S(   Nt   %s   %%(   t   replace(   R   t   text(    (    sl   p:\graphics\tools\python26\lib\site-packages\sqlalchemy-0.6.6-py2.6.egg\sqlalchemy\dialects\mysql\mysqldb.pyt   post_process_textL   s    (   R   R   R   R!   (    (    (    sl   p:\graphics\tools\python26\lib\site-packages\sqlalchemy-0.6.6-py2.6.egg\sqlalchemy\dialects\mysql\mysqldb.pyR   H   s   	t   MySQLIdentifierPreparer_mysqldbc           B   s   e  Z d  „  Z RS(   c         C   s(   | i  |  i |  i ƒ } | i  d d ƒ S(   NR   s   %%(   R   t   escape_quotet   escape_to_quote(   R   t   value(    (    sl   p:\graphics\tools\python26\lib\site-packages\sqlalchemy-0.6.6-py2.6.egg\sqlalchemy\dialects\mysql\mysqldb.pyt   _escape_identifierR   s    (   R   R   R&   (    (    (    sl   p:\graphics\tools\python26\lib\site-packages\sqlalchemy-0.6.6-py2.6.egg\sqlalchemy\dialects\mysql\mysqldb.pyR"   P   s   t   MySQLDialect_mysqldbc           B   s’   e  Z d  Z e Z e Z e Z e Z d Z	 e
 Z e Z e Z e i e i h  ƒ Z e d „  ƒ Z d d „ Z d „  Z d „  Z d „  Z d „  Z RS(	   t   mysqldbt   formatc         C   s
   t  d ƒ S(   Nt   MySQLdb(   t
   __import__(   t   cls(    (    sl   p:\graphics\tools\python26\lib\site-packages\sqlalchemy-0.6.6-py2.6.egg\sqlalchemy\dialects\mysql\mysqldb.pyt   dbapii   s    c         C   s0   | i  | | ƒ } | d  j	 o | | _ n d  S(   N(   t   executemanyt   NoneR   (   R   R   t	   statementt
   parameterst   contextR   (    (    sl   p:\graphics\tools\python26\lib\site-packages\sqlalchemy-0.6.6-py2.6.egg\sqlalchemy\dialects\mysql\mysqldb.pyt   do_executemanym   s    c      	   C   s  | i  d d d d d d ƒ } | i | i ƒ t i | d t ƒ t i | d t ƒ t i | d	 t ƒ t i | d
 t ƒ t i | d t ƒ t i | d t ƒ h  } x^ d d d d d g D]G } | | j o4 | | | | d <t i | | d t ƒ | | =q¼ q¼ W| o | | d <n | i d	 d ƒ } |  i	 d  j	 o9 y! d d k l } | | i O} Wn n X| | d	 <n g  | g S(   Nt   databaset   dbt   usernamet   usert   passwordt   passwdt   compresst   connect_timeoutt   client_flagt   local_infilet   use_unicodet   charsett   ssl_cat   ssl_keyt   ssl_certt
   ssl_capatht
   ssl_cipheri   t   ssli    iÿÿÿÿ(   t   CLIENT(   t   translate_connect_argst   updatet   queryR   t   coerce_kw_typet   boolt   intt   strt   getR-   R/   t   MySQLdb.constantsRF   t
   FOUND_ROWS(   R   t   urlt   optsRE   t   keyR<   t   CLIENT_FLAGS(    (    sl   p:\graphics\tools\python26\lib\site-packages\sqlalchemy-0.6.6-py2.6.egg\sqlalchemy\dialects\mysql\mysqldb.pyt   create_connect_argsr   s6    	 c         C   s‚   | i  } g  } t i d ƒ } xW | i | i ƒ  ƒ D]@ } y | i t | ƒ ƒ Wq4 t j
 o | i | ƒ q4 Xq4 Wt | ƒ S(   Ns   [.\-](	   t
   connectiont   ret   compilet   splitt   get_server_infot   appendRL   t
   ValueErrort   tuple(   R   RV   t	   dbapi_cont   versiont   rt   n(    (    sl   p:\graphics\tools\python26\lib\site-packages\sqlalchemy-0.6.6-py2.6.egg\sqlalchemy\dialects\mysql\mysqldb.pyt   _get_server_version_info™   s    	 c         C   s   | i  d S(   Ni    (   t   args(   R   t	   exception(    (    sl   p:\graphics\tools\python26\lib\site-packages\sqlalchemy-0.6.6-py2.6.egg\sqlalchemy\dialects\mysql\mysqldb.pyt   _extract_error_code¤   s    c      
   C   sð   |  i  d
 j  o+ y | i i ƒ  SWq; t j
 o q; Xn | i d ƒ } t g  } |  i | ƒ D] } | | d | d f qa ~ ƒ } d | j o	 | d Sy | i i ƒ  SWn: t j
 o. d | j o	 | d St i d ƒ d Sn Xd	 S(   s:   Sniff out the character set in use for connection results.i   i   i    s%   SHOW VARIABLES LIKE 'character_set%%'t   character_set_resultst   character_sets   Could not detect the connection character set with this combination of MySQL server and MySQL-python. MySQL-python >= 1.2.2 is recommended.  Assuming latin1.t   latin1N(   i   i   i    (	   t   server_version_infoRV   t   character_set_namet   AttributeErrort   executet   dictt   _compat_fetchallR   t   warn(   R   RV   t   rst   _[1]t   rowRR   (    (    sl   p:\graphics\tools\python26\lib\site-packages\sqlalchemy-0.6.6-py2.6.egg\sqlalchemy\dialects\mysql\mysqldb.pyt   _detect_charset§   s"    	>		N(   R   R   t   drivert   Falset   supports_unicode_statementst   Truet   supports_sane_rowcountt   supports_sane_multi_rowcountt   supports_native_decimalt   default_paramstyleR   t   execution_ctx_clsR   t   statement_compilerR"   t   preparerR   t   update_copyR    t   colspecst   classmethodR-   R/   R3   RU   Rb   Re   Rs   (    (    (    sl   p:\graphics\tools\python26\lib\site-packages\sqlalchemy-0.6.6-py2.6.egg\sqlalchemy\dialects\mysql\mysqldb.pyR'   V   s$   		'		(   t   __doc__RW   t   sqlalchemy.dialects.mysql.baseR    R   R   R   t   sqlalchemy.engineR   t   engine_baseR   t   sqlalchemy.sqlR   t   sql_operatorst
   sqlalchemyR   R   R	   R
   R   t   sqltypesR   R   R   R   R"   R'   t   dialect(    (    (    sl   p:\graphics\tools\python26\lib\site-packages\sqlalchemy-0.6.6-py2.6.egg\sqlalchemy\dialects\mysql\mysqldb.pyt   <module>3   s   ".
w