3
���h�� � @ s� d Z ddlmZ ddlmZmZmZ ddlmZ ddlZddl m
Z
mZmZm
Z
ddlZddlZddljjZddlmZmZmZ ddlmZ dd lmZ dd
lmZmZ ddlm Z ddl!m"Z" G d
d� de#�Z$G dd� de%�Z&da'dd� Z(dd� Z)dd� Z*dQdd�Z+dd� Z,dRdd�Z-dSdd�Z.e
dTded �d!d"��Z/e
dUe0e
e d �d$d"��Z/dVee0 eee
e f d �d%d"�Z/e
dWded �d&d'��Z1e
dXe0e
e d �d(d'��Z1dYee0 eee
e f d �d)d'�Z1e
dZded �d*d+��Z2e
d[e0e
e d �d,d+��Z2d\ee0 eee
e f d �d-d+�Z2d]dd/�d0d1�Z3d^d2d3�Z4e4Z5d4d5� Z6d_d7d8�Z7G d9d:� d:e �Z8G d;d<� d<e �Z9G d=d>� d>e9�Z:d?d@dAdBdCdDdAdE�Z;dFdG� Z<dHdI� Z=dJZ>G dKdL� dLe8�Z?G dMdN� dNe9�Z@d`dOdP�ZAdS )az|
Collection of query wrappers / abstractions to both facilitate data
retrieval and to reduce dependency on DB-specific API.
� )�contextmanager)�date�datetime�time)�partialN)�Iterator�Optional�Union�overload)�is_datetime64tz_dtype�is_dict_like�is_list_like)�DatetimeTZDtype)�isna)� DataFrame�Series)�PandasObject)�to_datetimec @ s e Zd ZdS )�SQLAlchemyRequiredN)�__name__�
__module__�__qualname__� r r �//tmp/pip-build-5_djhm0z/pandas/pandas/io/sql.pyr s r c @ s e Zd ZdS )�
DatabaseErrorN)r r r r r r r r s r c C sT t d kr2ydd l}da W n tk
r0 da Y nX t rLdd l}t| |jj�S dS d S )Nr TF)�_SQLALCHEMY_INSTALLED�
sqlalchemy�ImportError�
isinstance�engineZConnectable)�conr r r r �_is_sqlalchemy_connectable( s
r! c C s6 | g}|dk r2t |d�r$||g7 }n|t|�g7 }|S )z9Convert SQL and params args to DBAPI2.0 compliant format.N�keys)�hasattr�list)�sql�params�argsr r r �_convert_params: s
r( c C s2 | dks| dks| dkrg } nt | d�s.| g} | S )z3Process parse_dates argument for read_sql functionsTNF�__iter__)r# )�parse_datesr r r �_process_parse_dates_argumentE s
r+ c C s� t |t�rt| fddi|��S |d krJt| jjtj�sFt| jjtj�rJd}|dkrbt| d||d�S t | j�rxt| d
d�S t| d||d�S d S )N�errors�ignore�s�D�d�h�m�ms�us�nsZcoerce)r, �unit�utcT)r7 )r, �formatr7 )r/ r0 r1 r2 r. r3 r4 r5 )
r �dictr �
issubclass�dtype�type�np�floating�integerr )�colr7 r8 r r r �_handle_date_columnP s
rA c
C sj t |�}x\| j� D ]P\}}t|j�s,||kry|| }W n tk
rP d}Y nX t||d�| |< |