sqlalchemy将我的df值保存为文本类型,我想要varchar

时间:2016-12-16 09:31:25

标签: python pandas sqlalchemy

我在pandas df中有一张桌子

main_id  p_x   p_y  flag   score
  1       10    20    Y    2.3333
  2       20    30    N    1.653
  3       39    2     Y    6.56546
  1       45    300   Y    2.345

我想将它存储在mysql数据库中。

我正在使用sqlalchemy

from sqlalchemy import create_engine
engine_name = create_engine('mysql+mysqldb://'+username+':'+password+'@'+hostname+'/'+dbname, echo=False)

df.to_sql(name='table_name', con=engine_name, if_exists = 'append', index=False)

它在我的数据库中成功创建。 但我的主要问题是

当我在mysql中describe table_name时。

+---------------------+--------+------+-----+---------+-------+
| Field               | Type   | Null | Key | Default | Extra |
+---------------------+--------+------+-----+---------+-------+
| main_id             | text   | YES  |     | NULL    |       |
| p_x                 | text   | YES  |     | NULL    |       |
| p_y                 | text   | YES  |     | NULL    |       |
| flag                | text   | YES  |     | NULL    |       |
| score               | double | YES  |     | NULL    |       |
+---------------------+--------+------+-----+---------+-------+

该字段的类型为text

但是我希望VARCHAR(40)列为main_id p_x p_y flag

有什么办法吗?

1 个答案:

答案 0 :(得分:0)

您可以指定列数据类型,默认情况下panda使用TEXT:

from sqlalchemy.types import String
df.to_sql(name='table_name', con=engine_name, if_exists = 'append', index=False, 
        dtype={'main_id': String, 'p_x': String,  'p_y': String  'flag': String})

sql-data-types