Как я могу импортировать geoDataFrame в MySQL? - PullRequest
0 голосов
/ 05 августа 2020

У меня есть geoDataFrame со следующей структурой:

<class 'geopandas.geodataframe.GeoDataFrame'>
RangeIndex: 28 entries, 0 to 27
Data columns (total 3 columns):
 #   Column       Non-Null Count  Dtype   
---  ------       --------------  -----   
 0   Name         28 non-null     object  
 1   Description  28 non-null     object  
 2   geometry     28 non-null     geometry
dtypes: geometry(1), object(2)
memory usage: 800.0+ bytes

Вот пи c того, как выглядит мой df: enter image description here

I am trying to save it in an MySQL database by using gdf.to_sql and my connection is using SQLAlchemy but I get the following error: AttributeError: 'GeometryDtype' object has no attribute 'base'.

I have been looking around and found this решение но я не могу чтобы найти правильный синтаксис, заставить его работать для MySQL.

1 Ответ

0 голосов
/ 10 августа 2020

После многих попыток я заметил, что функция to_ sql не генерирует правильный синтаксис MySQL для работы. Также с подходом к переходу на wkb MySQL все еще не распознал этот столбец как геометрию, если я оставил текст как есть (см. Рисунок в вопросе).

Что сработало для меня, так это изменить поле геометрии в строку и обновил его в python, чтобы он выглядел так: введите описание изображения здесь

После этого я перешел к использованию приведенного ниже кода, где я отправил фрейм данных на MySQL, а затем обновил таблицу, чтобы установить столбец геометрии:

regions.to_sql('pr_regions', con=conn, schema='eq_pr_db',
               if_exists='replace', index=False)

#add column type Polygon

conn.execute('''ALTER TABLE `eq_pr_db`.`pr_regions` 
                ADD COLUMN `geom` Polygon;''')

#populate new column by applying the ST_GeomFromText function to transform the string to geometry type.

conn.execute('''UPDATE `eq_pr_db`.`pr_regions`
                SET geom =  ST_GeomFromText(geometry) ;''')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...