为什么Pandas和GeoPandas能够使用psycopg2连接读取数据库表,但必须依靠SQLAlchemy来写一个?

问题描述 投票:1回答:1

上下文

我只是在尝试从Python3脚本对某些数据库执行一些I / O操作时遇到麻烦。

[当我想Python3到数据库时,我习惯性地使用connect来处理psycopg2psycopg2

我的数据通常存储为connections cursors和/或Pandas的等效项Pandas

困难

为了读取数据数据库表;

使用DataFrames

我可以依靠其DataFrames方法作为参数GeoPandas,如文档中所述:

GeoPandas

使用GeoDataFrames

我可以依靠其GeoDataFrames方法作为参数Pandas,如文档中所述:

Pandas

为了写入数据数据库表;

使用.read_sql()

我可以依赖.read_sql()方法,该方法将con作为参数,如文档中所述:

con : SQLAlchemy connectable (engine/connection) or database str URI
        or DBAPI2 connection (fallback mode)'
        Using SQLAlchemy makes it possible to use any DB supported by that
        library. If a DBAPI2 object, only sqlite3 is supported. The user is responsible
        for engine disposal and connection closure for the SQLAlchemy connectable. See
        `here <https://docs.sqlalchemy.org/en/13/core/connections.html>`_

使用GeoPandas

我可以依赖GeoPandas方法(直接依赖于.read_postigs() .read_postigs()),该方法将con作为参数,如文档中所述:

con : DB connection object or SQLAlchemy engine
        Active connection to the database to query.

[从这里,我很容易理解Pandas是基于Pandas构建的,特别是为其.to_sql()对象创建的,这是一个可以处理地理数据的特殊.to_sql()

但是我想知道为什么con能够直接将con : sqlalchemy.engine.Engine or sqlite3.Connection Using SQLAlchemy makes it possible to use any DB supported by that library. Legacy support is provided for sqlite3.Connection objects. The user is responsible for engine disposal and connection closure for the SQLAlchemy connectable See `here <https://docs.sqlalchemy.org/en/13/core/connections.html>`_ 连接作为参数,而不能将GeoPandas作为参数,是否为后者计划了呢?

为什么在处理[[write数据时,为什么不这样?我希望(可能还有许多其他人[[1,2)直接给他们一个GeoPandas .to_sql()参数,而不是依靠Pandas .to_sql()。因为这个工具真的很棒,所以它使我可以使用两个不同的框架连接到数据库,从而处理两个不同的连接字符串(我个人更喜欢.to_sql()处理字典中的参数扩展以构建连接字符串的方式。例如concon : sqlalchemy.engine.Engine or sqlite3.Connection Using SQLAlchemy makes it possible to use any DB supported by that library. Legacy support is provided for sqlite3.Connection objects. The user is responsible for engine disposal and connection closure for the SQLAlchemy connectable See `here <https://docs.sqlalchemy.org/en/13/core/connections.html>`_ 注入,例如此处所述:GeoPandas)。

解决方法

    [我首先是通过以下方式从参数字典中使用GeoPandas创建我的连接字符串:
  1. Pandas
  2. 然后我发现这种方式更好,也更pythonic:
  3. Pandas
  4. 我最终将其替换为这个,以便可以互换地使用它来构建GeoDataFrame GeoDataFrameDataFrame引擎:
  5. DataFrame

    a)

初始化GeoPandas GeoPandas现在通过:

psycopg2

b)
并通过以下方式初始化psycopg2 Pandas

Pandas(或带有任何风味的psycopg2

这里有详细记录:psycopg2和这里:connections

[1]SQLAlchemy[2] SQLAlchemy

pandas dataframe sqlalchemy psycopg2 geopandas
1个回答
0
投票
[意识到他们正在复制SQLAlchemy中已经存在的许多逻辑后,他们可能决定通过简单地接受URL对象并使用SQLAlchemy(独立于数据库的)SQL Expression语言将所有复杂性“外包”给SQLAlchemy本身。创建表。
© www.soinside.com 2019 - 2024. All rights reserved.