@@ -240,6 +240,65 @@ def test_onecolumn_of_integer(self):
240
240
result = sql .read_frame ("select * from mono_df" ,con_x )
241
241
tm .assert_frame_equal (result ,mono_df )
242
242
243
+ def test_if_exists (self ):
244
+ df_if_exists_1 = DataFrame ({'col1' : [1 , 2 ], 'col2' : ['A' , 'B' ]})
245
+ df_if_exists_2 = DataFrame ({'col1' : [3 , 4 , 5 ], 'col2' : ['C' , 'D' , 'E' ]})
246
+ table_name = 'table_if_exists'
247
+ sql_select = "SELECT * FROM %s" % table_name
248
+
249
+ def clean_up (test_table_to_drop ):
250
+ """
251
+ Drops tables created from individual tests
252
+ so no dependencies arise from sequential tests
253
+ """
254
+ if sql .table_exists (test_table_to_drop , self .db , flavor = 'sqlite' ):
255
+ cur = self .db .cursor ()
256
+ cur .execute ("DROP TABLE %s" % test_table_to_drop )
257
+ cur .close ()
258
+
259
+ # test if invalid value for if_exists raises appropriate error
260
+ self .assertRaises (ValueError ,
261
+ sql .write_frame ,
262
+ frame = df_if_exists_1 ,
263
+ con = self .db ,
264
+ name = table_name ,
265
+ flavor = 'sqlite' ,
266
+ if_exists = 'notvalidvalue' )
267
+ clean_up (table_name )
268
+
269
+ # test if_exists='fail'
270
+ sql .write_frame (frame = df_if_exists_1 , con = self .db , name = table_name ,
271
+ flavor = 'sqlite' , if_exists = 'fail' )
272
+ self .assertRaises (ValueError ,
273
+ sql .write_frame ,
274
+ frame = df_if_exists_1 ,
275
+ con = self .db ,
276
+ name = table_name ,
277
+ flavor = 'sqlite' ,
278
+ if_exists = 'fail' )
279
+
280
+ # test if_exists='replace'
281
+ sql .write_frame (frame = df_if_exists_1 , con = self .db , name = table_name ,
282
+ flavor = 'sqlite' , if_exists = 'replace' )
283
+ self .assertEqual (sql .tquery (sql_select , con = self .db ),
284
+ [(1 , 'A' ), (2 , 'B' )])
285
+ sql .write_frame (frame = df_if_exists_2 , con = self .db , name = table_name ,
286
+ flavor = 'sqlite' , if_exists = 'replace' )
287
+ self .assertEqual (sql .tquery (sql_select , con = self .db ),
288
+ [(3 , 'C' ), (4 , 'D' ), (5 , 'E' )])
289
+ clean_up (table_name )
290
+
291
+ # test if_exists='append'
292
+ sql .write_frame (frame = df_if_exists_1 , con = self .db , name = table_name ,
293
+ flavor = 'sqlite' , if_exists = 'fail' )
294
+ self .assertEqual (sql .tquery (sql_select , con = self .db ),
295
+ [(1 , 'A' ), (2 , 'B' )])
296
+ sql .write_frame (frame = df_if_exists_2 , con = self .db , name = table_name ,
297
+ flavor = 'sqlite' , if_exists = 'append' )
298
+ self .assertEqual (sql .tquery (sql_select , con = self .db ),
299
+ [(1 , 'A' ), (2 , 'B' ), (3 , 'C' ), (4 , 'D' ), (5 , 'E' )])
300
+ clean_up (table_name )
301
+
243
302
244
303
class TestMySQL (tm .TestCase ):
245
304
@@ -483,6 +542,66 @@ def test_keyword_as_column_names(self):
483
542
sql .write_frame (df , con = self .db , name = 'testkeywords' ,
484
543
if_exists = 'replace' , flavor = 'mysql' )
485
544
545
+ def test_if_exists (self ):
546
+ _skip_if_no_MySQLdb ()
547
+ df_if_exists_1 = DataFrame ({'col1' : [1 , 2 ], 'col2' : ['A' , 'B' ]})
548
+ df_if_exists_2 = DataFrame ({'col1' : [3 , 4 , 5 ], 'col2' : ['C' , 'D' , 'E' ]})
549
+ table_name = 'table_if_exists'
550
+ sql_select = "SELECT * FROM %s" % table_name
551
+
552
+ def clean_up (test_table_to_drop ):
553
+ """
554
+ Drops tables created from individual tests
555
+ so no dependencies arise from sequential tests
556
+ """
557
+ if sql .table_exists (test_table_to_drop , self .db , flavor = 'mysql' ):
558
+ cur = self .db .cursor ()
559
+ cur .execute ("DROP TABLE %s" % test_table_to_drop )
560
+ cur .close ()
561
+
562
+ # test if invalid value for if_exists raises appropriate error
563
+ self .assertRaises (ValueError ,
564
+ sql .write_frame ,
565
+ frame = df_if_exists_1 ,
566
+ con = self .db ,
567
+ name = table_name ,
568
+ flavor = 'mysql' ,
569
+ if_exists = 'notvalidvalue' )
570
+ clean_up (table_name )
571
+
572
+ # test if_exists='fail'
573
+ sql .write_frame (frame = df_if_exists_1 , con = self .db , name = table_name ,
574
+ flavor = 'mysql' , if_exists = 'fail' )
575
+ self .assertRaises (ValueError ,
576
+ sql .write_frame ,
577
+ frame = df_if_exists_1 ,
578
+ con = self .db ,
579
+ name = table_name ,
580
+ flavor = 'mysql' ,
581
+ if_exists = 'fail' )
582
+
583
+ # test if_exists='replace'
584
+ sql .write_frame (frame = df_if_exists_1 , con = self .db , name = table_name ,
585
+ flavor = 'mysql' , if_exists = 'replace' )
586
+ self .assertEqual (sql .tquery (sql_select , con = self .db ),
587
+ [(1 , 'A' ), (2 , 'B' )])
588
+ sql .write_frame (frame = df_if_exists_2 , con = self .db , name = table_name ,
589
+ flavor = 'mysql' , if_exists = 'replace' )
590
+ self .assertEqual (sql .tquery (sql_select , con = self .db ),
591
+ [(3 , 'C' ), (4 , 'D' ), (5 , 'E' )])
592
+ clean_up (table_name )
593
+
594
+ # test if_exists='append'
595
+ sql .write_frame (frame = df_if_exists_1 , con = self .db , name = table_name ,
596
+ flavor = 'mysql' , if_exists = 'fail' )
597
+ self .assertEqual (sql .tquery (sql_select , con = self .db ),
598
+ [(1 , 'A' ), (2 , 'B' )])
599
+ sql .write_frame (frame = df_if_exists_2 , con = self .db , name = table_name ,
600
+ flavor = 'mysql' , if_exists = 'append' )
601
+ self .assertEqual (sql .tquery (sql_select , con = self .db ),
602
+ [(1 , 'A' ), (2 , 'B' ), (3 , 'C' ), (4 , 'D' ), (5 , 'E' )])
603
+ clean_up (table_name )
604
+
486
605
487
606
if __name__ == '__main__' :
488
607
nose .runmodule (argv = [__file__ , '-vvs' , '-x' , '--pdb' , '--pdb-failure' ],
0 commit comments