88import datetime
99import warnings
1010
11+ try :
12+ from unittest2 import SkipTest
13+ except :
14+ from unittest import SkipTest
15+
16+
1117__all__ = ["TestConversion" , "TestCursor" , "TestBulkInserts" ]
1218
1319
@@ -19,16 +25,13 @@ def test_datatypes(self):
1925 c .execute ("create table test_datatypes (b bit, i int, l bigint, f real, s varchar(32), u varchar(32), bb blob, d date, dt datetime, ts timestamp, td time, t time, st datetime)" )
2026 try :
2127 # insert values
22- v = (True , - 3 , 123456789012 , 5.7 , "hello'\" world" , u"Espa\xc3 \xb1 ol" , "binary\x00 data" .encode (conn .charset ), datetime .date (1988 ,2 ,2 ), datetime .datetime .now (), datetime .timedelta (5 ,6 ), datetime .time (16 ,32 ), time .localtime ())
28+
29+ v = (True , - 3 , 123456789012 , 5.7 , "hello'\" world" , u"Espa\xc3 \xb1 ol" , "binary\x00 data" .encode (conn .charset ), datetime .date (1988 ,2 ,2 ), datetime .datetime (2014 , 5 , 15 , 7 , 45 , 57 ), datetime .timedelta (5 ,6 ), datetime .time (16 ,32 ), time .localtime ())
2330 c .execute ("insert into test_datatypes (b,i,l,f,s,u,bb,d,dt,td,t,st) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" , v )
2431 c .execute ("select b,i,l,f,s,u,bb,d,dt,td,t,st from test_datatypes" )
2532 r = c .fetchone ()
2633 self .assertEqual (util .int2byte (1 ), r [0 ])
27- self .assertEqual (v [1 :8 ], r [1 :8 ])
28- # mysql throws away microseconds so we need to check datetimes
29- # specially. additionally times are turned into timedeltas.
30- self .assertEqual (datetime .datetime (* v [8 ].timetuple ()[:6 ]), r [8 ])
31- self .assertEqual (v [9 ], r [9 ]) # just timedeltas
34+ self .assertEqual (v [1 :10 ], r [1 :10 ])
3235 self .assertEqual (datetime .timedelta (0 , 60 * (v [10 ].hour * 60 + v [10 ].minute )), r [10 ])
3336 self .assertEqual (datetime .datetime (* v [- 1 ][:6 ]), r [- 1 ])
3437
@@ -123,23 +126,24 @@ def test_timedelta(self):
123126 - datetime .timedelta (0 , 1800 )),
124127 c .fetchone ())
125128
126- def test_datetime (self ):
127- """ test datetime conversion """
129+ def test_datetime_microseconds (self ):
130+ """ test datetime conversion w microseconds"""
131+
128132 conn = self .connections [0 ]
133+ if not self .mysql_server_is (conn , (5 , 6 , 4 )):
134+ raise SkipTest ("target backend does not support microseconds" )
129135 c = conn .cursor ()
130- dt = datetime .datetime (2013 ,11 ,12 ,9 ,9 ,9 ,123450 )
136+ dt = datetime .datetime (2013 , 11 , 12 , 9 , 9 , 9 , 123450 )
137+ c .execute ("create table test_datetime (id int, ts datetime(6))" )
131138 try :
132- c .execute ("create table test_datetime (id int, ts datetime(6))" )
133- c .execute ("insert into test_datetime values (1,'2013-11-12 09:09:09.12345')" )
139+ c .execute (
140+ "insert into test_datetime values (%s, %s)" ,
141+ (1 , dt )
142+ )
134143 c .execute ("select ts from test_datetime" )
135- self .assertEqual ((dt ,),c .fetchone ())
136- except ProgrammingError :
137- # User is running a version of MySQL that doesn't support msecs within datetime
138- pass
144+ self .assertEqual ((dt ,), c .fetchone ())
139145 finally :
140- with warnings .catch_warnings ():
141- warnings .filterwarnings ("ignore" )
142- c .execute ("drop table if exists test_datetime" )
146+ c .execute ("drop table test_datetime" )
143147
144148
145149class TestCursor (base .PyMySQLTestCase ):
0 commit comments