@@ -360,28 +360,34 @@ def table_exists(name, con, flavor):
360
360
361
361
def get_sqltype (pytype , flavor ):
362
362
sqltype = {'mysql' : 'VARCHAR (63)' ,
363
- 'sqlite' : 'TEXT' }
363
+ 'sqlite' : 'TEXT' ,
364
+ 'postgres' : 'text' }
364
365
365
366
if issubclass (pytype , np .floating ):
366
367
sqltype ['mysql' ] = 'FLOAT'
367
368
sqltype ['sqlite' ] = 'REAL'
369
+ sqltype ['postgres' ] = 'real'
368
370
369
371
if issubclass (pytype , np .integer ):
370
372
#TODO: Refine integer size.
371
373
sqltype ['mysql' ] = 'BIGINT'
372
374
sqltype ['sqlite' ] = 'INTEGER'
375
+ sqltype ['postgres' ] = 'integer'
373
376
374
377
if issubclass (pytype , np .datetime64 ) or pytype is datetime :
375
378
# Caution: np.datetime64 is also a subclass of np.number.
376
379
sqltype ['mysql' ] = 'DATETIME'
377
380
sqltype ['sqlite' ] = 'TIMESTAMP'
381
+ sqltype ['postgres' ] = 'timestamp'
378
382
379
383
if pytype is datetime .date :
380
384
sqltype ['mysql' ] = 'DATE'
381
385
sqltype ['sqlite' ] = 'TIMESTAMP'
386
+ sqltype ['postgres' ] = 'date'
382
387
383
388
if issubclass (pytype , np .bool_ ):
384
389
sqltype ['sqlite' ] = 'INTEGER'
390
+ sqltype ['postgres' ] = 'boolean'
385
391
386
392
return sqltype [flavor ]
387
393
@@ -393,9 +399,13 @@ def get_schema(frame, name, flavor, keys=None):
393
399
column_types = zip (safe_columns , map (lookup_type , frame .dtypes ))
394
400
if flavor == 'sqlite' :
395
401
columns = ',\n ' .join ('[%s] %s' % x for x in column_types )
402
+ elif flavor == 'mysql' :
403
+ columns = ',\n ' .join ('`%s` %s' % x for x in column_types )
404
+ elif flavor == 'postgres' :
405
+ columns = ',\n ' .join ('%s %s' % x for x in column_types )
396
406
else :
397
- columns = ', \n ' . join ( '`%s` %s' % x for x in column_types )
398
-
407
+ raise ValueError ( "Don't have a template for that database flavor." )
408
+
399
409
keystr = ''
400
410
if keys is not None :
401
411
if isinstance (keys , basestring ):
0 commit comments