3
���h4� � @ s d Z ddlZddlmZmZmZ ddlmZ ddlZddlZddl Z
ddlZddlm
Z
mZ ddlZddlmZmZmZmZmZmZmZmZmZmZ ddljZddljjZddlm Z m!Z! y<ddl"Z"ddl#m$Z$ dd l%m&Z' ddl(Z"ddl)jj*Z*d
Z+W n e,k
�r dZ+Y nX dd
dd�dddd�dddd�ddpd �d!dqd �d"drd �d�d$d%d&d�d'd(d)d�d*d+d,d�d-d.id/�Z-G d0d1� d1�Z.G d2d3� d3e.�Z/G d4d5� d5e.�Z0G d6d7� d7e.�Z1G d8d9� d9�Z2G d:d;� d;e2�Z3ej4j5ej4j6e+ d<d=�G d>d?� d?e1e3���Z7G d@dA� dA�Z8ej4j5G dBdC� dCe8e7��Z9ej4j5G dDdE� dEe0e3��Z:G dFdG� dGe1e2�Z;G dHdI� dIe8e;�Z<G dJdK� dK�Z=G dLdM� dM�Z>G dNdO� dO�Z?ej4j5ej4j@G dPdQ� dQe>e;���ZAej4j5ej4j@G dRdS� dSe>e<���ZBej4j5ej4j@G dTdU� dUe?e;���ZCej4j5ej4j@G dVdW� dWe?e<���ZDej4j5G dXdY� dYe=e;��ZEej4j5G dZd[� d[e=e<��ZFej4j5G d\d]� d]e0e2��ZGd^d_� ZHed`jIeJd`jIe
jKd`jIeLd`jIeMdajIeNdbjIeOd�dcdd� e
jPdejIeQdfjIi ZRdgdh� ZSdsdidj�ZTej4j5G dkdl� dle0��ZUej4j5ej4j@ej4jVdmd=�G dndo� doe/����ZWdS )ta SQL io tests
The SQL tests are broken down in different classes:
- `PandasSQLTest`: base class with common methods for all test classes
- Tests for the public API (only tests with sqlite3)
- `_TestSQLApi` base class
- `TestSQLApi`: test the public API with sqlalchemy engine
- `TestSQLiteFallbackApi`: test the public API with a sqlite DBAPI
connection
- Tests for the different SQL flavors (flavor specific type conversions)
- Tests for the sqlalchemy mode: `_TestSQLAlchemy` is the base class with
common methods, `_TestSQLAlchemyConn` tests the API with a SQLAlchemy
Connection object. The different tested flavors (sqlite3, MySQL,
PostgreSQL) derive from the base class
- Tests for the fallback mode (`TestSQLiteFallback`)
� N)�date�datetime�time)�StringIO)�is_datetime64_dtype�is_datetime64tz_dtype)
� DataFrame�Index�
MultiIndex�Series� Timestamp�concat�
date_range�isna�to_datetime�to_timedelta)�read_sql_query�read_sql_table)�declarative)�sessionTFz�CREATE TABLE iris (
"SepalLength" REAL,
"SepalWidth" REAL,
"PetalLength" REAL,
"PetalWidth" REAL,
"Name" TEXT
)z�CREATE TABLE iris (
`SepalLength` DOUBLE,
`SepalWidth` DOUBLE,
`PetalLength` DOUBLE,
`PetalWidth` DOUBLE,
`Name` VARCHAR(200)
)a CREATE TABLE iris (
"SepalLength" DOUBLE PRECISION,
"SepalWidth" DOUBLE PRECISION,
"PetalLength" DOUBLE PRECISION,
"PetalWidth" DOUBLE PRECISION,
"Name" VARCHAR(200)
))�sqlite�mysql�
postgresqlz&INSERT INTO iris VALUES(?, ?, ?, ?, ?)z.INSERT INTO iris VALUES(%s, %s, %s, %s, "%s");z,INSERT INTO iris VALUES(%s, %s, %s, %s, %s);a� CREATE TABLE types_test_data (
"TextCol" TEXT,
"DateCol" TEXT,
"IntDateCol" INTEGER,
"IntDateOnlyCol" INTEGER,
"FloatCol" REAL,
"IntCol" INTEGER,
"BoolCol" INTEGER,
"IntColWithNull" INTEGER,
"BoolColWithNull" INTEGER
)a� CREATE TABLE types_test_data (
`TextCol` TEXT,
`DateCol` DATETIME,
`IntDateCol` INTEGER,
`IntDateOnlyCol` INTEGER,
`FloatCol` DOUBLE,
`IntCol` INTEGER,
`BoolCol` BOOLEAN,
`IntColWithNull` INTEGER,
`BoolColWithNull` BOOLEAN
)a� CREATE TABLE types_test_data (
"TextCol" TEXT,
"DateCol" TIMESTAMP,
"DateColWithTz" TIMESTAMP WITH TIME ZONE,
"IntDateCol" INTEGER,
"IntDateOnlyCol" INTEGER,
"FloatCol" DOUBLE PRECISION,
"IntCol" INTEGER,
"BoolCol" BOOLEAN,
"IntColWithNull" INTEGER,
"BoolColWithNull" BOOLEAN
)zo
INSERT INTO types_test_data
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)
�TextCol�DateCol�
IntDateCol�IntDateOnlyCol�FloatCol�IntCol�BoolCol�IntColWithNull�BoolColWithNull)�query�fieldszz
INSERT INTO types_test_data
VALUES("%s", %s, %s, %s, %s, %s, %s, %s, %s)
z|
INSERT INTO types_test_data
VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
�
DateColWithTzz1SELECT * FROM iris WHERE Name=? AND SepalLength=?z9SELECT * FROM iris WHERE `Name`="%s" AND `SepalLength`=%sz7SELECT * FROM iris WHERE "Name"=%s AND "SepalLength"=%sz]
SELECT * FROM iris WHERE Name=:name AND SepalLength=:length
zy
SELECT * FROM iris WHERE
`Name`="%(name)s" AND `SepalLength`=%(length)s
zw
SELECT * FROM iris WHERE
"Name"=%(name)s AND "SepalLength"=%(length)s
z&SELECT * FROM iris WHERE Name LIKE '%'z(SELECT * FROM iris WHERE `Name` LIKE '%'z(SELECT * FROM iris WHERE "Name" LIKE '%'r z]
CREATE VIEW iris_view AS
SELECT * FROM iris
)�create_iris�insert_iris�create_test_types�insert_test_types�read_parameters�read_named_parameters�read_no_parameters_with_percent�create_viewc @ s e Zd Zdd� ZdS )� MixInBasec C s2 t | d�r.x| j� D ]}| j|� qW | j� d S )N�conn)�hasattr�_get_all_tables�
drop_table�_close_conn)�self�method�tbl� r6 �:/tmp/pip-build-5_djhm0z/pandas/pandas/tests/io/test_sql.py�teardown_method� s
zMixInBase.teardown_methodN)�__name__�
__module__�__qualname__r8 r6 r6 r6 r7 r- � s r- c @ s$ e Zd Zdd� Zdd� Zdd� ZdS )�
MySQLMixInc C s. | j j� }|jdtj|�� �� | j j� d S )NzDROP TABLE IF EXISTS )r. �cursor�execute�sqlZ_get_valid_mysql_name�commit)r3 �
table_name�curr6 r6 r7 r1 � s
zMySQLMixIn.drop_tablec C s& |