У меня есть простой GeoPandas Dataframe:
Я хотел бы загрузить этот GeoDataframe в таблицу PostGIS. У меня уже есть база данных с расширением PostGIS, но я не могу добавить этот Dataframe в виде таблицы.
Я пробовал следующее:
engine = <>
meta = MetaData(engine)
eld_test = Table('eld_test', meta, Column('id', Integer, primary_key=True), Column('key_comb_drvr', Text),
Column('geometry', Geometry('Point', srid=4326)))
eld_test.create(engine)
conn = engine.connect()
conn.execute(eld_test.insert(), df.to_dict('records'))
Ответы:
Используя метод to_sql от Panda и SQLAlchemy, вы можете сохранить фрейм данных в Postgres. А поскольку вы храните Geodataframe, GeoAlchemy будет обрабатывать столбец geom для вас. Вот пример кода:
Стоит отметить, что параметр if_exists позволяет вам обрабатывать способ добавления фрейма данных в вашу таблицу postgres:
источник
У меня также был тот же вопрос, который вы задали, и я потратил много-много дней на него (больше, чем я хочу признаться) в поисках решения. Предполагая следующую таблицу postgreSQL с расширением postGIS,
это то, что я наконец получил работать:
Я не могу сказать, является ли моя логика соединения с базой данных лучшей, поскольку я в основном скопировал ее из другой ссылки и был просто счастлив, что смог успешно автоматизировать (или отразить) мою существующую таблицу с распознанным определением геометрии. Я пишу python для sql пространственного кода всего несколько месяцев, так что я знаю, что есть чему поучиться.
источник
У меня есть решение, которое требует только psycopg2 и стройное (кроме геопанд, конечно). Как правило, плохая практика - перебирать
(Geo)DataFrame
объекты, потому что это медленно, но для маленьких или для одноразовых задач это все равно выполнит работу.По сути, он работает путем выгрузки геометрии в формат WKB в другом столбце, а затем повторно вводит ее для
GEOMETRY
ввода при вставке.Обратите внимание, что вам придется заранее создать таблицу с правильными столбцами.
источник