【问题标题】:When to use SQLAlchemy and when to use Pandas for data manipulation [closed]何时使用 SQLAlchemy 以及何时使用 Pandas 进行数据操作 [关闭]
【发布时间】:2018-09-26 05:39:57
【问题描述】:

我知道我们可以使用 SQLAlchemy 从数据库中导入数据。但是,当您可以简单地导入数据并将其转换为数据框,然后使用 pandas 和其他 python 库对其进行操作时,为什么还要选择 SQLAlchemy 来操作数据。

我知道这是一个基于意见的问题,但我认为了解其中的区别很重要,尤其是导入数据和操作数据非常耗时。通过确定要使用的正确方法可以节省大量时间,从而为 StackOverflow 节省许多关于特定主题的问题。

更准确地说,为什么在 pandas 足够的情况下使用 SQL Alchemy 来处理数据。是否存在 SQL Alchemy 击败 pandas 的特定案例。

更新

当我说操作时,我指的是加、减、计数、计算百分比或平均值,即数学函数和其他数据操作技术(分组、排序、追加、降序或升序...)。

【问题讨论】:

  • 这个问题不太正确,因为 Pandas 内部使用 SQL Alchemy... :-)
  • @MaxU 如果pandas内部使用SQL Alchemy,那么SQL Alchemy除了连接引擎和导入数据还有什么用呢?当 pandas 满足许多功能时,我对 SQL Alchemy 数据操作的存在感到非常困惑。
  • 您不使用 SQLAlchemy 来操作数据,而是抽象与数据库的通信以及关系模型和对象模型之间的映射。然后,您可以通过各种方式从数据库中查询数据。
  • 有很多程序不使用 Pandas,但他们使用的是 SQL Alchemy...所以你的问题类似于“如果有布加迪/兰博基尼,为什么需要引擎那里”
  • @Victor SQLAlchemy 将数据库中的数据转换为 Python 对象,这就是它被称为 ORM(对象关系映射器)的原因。然后在您的代码中,您只需担心处理您的 Python 对象,SQLAlchemy 将自动序列化到/从您的数据库。

标签: python sql pandas dataframe sqlalchemy


【解决方案1】:

这是一个同时使用 Pandas 和 SQL Alchemy 的示例:

假设您需要从 DataFrame(有 100.000 行)更新一个 DB 表(假设它有 100.000.000 行并且不适合内存)。 IE。在您的 DF 中有一个列 ID 并且您想要使用来自 DF 的数据为那些 ID 更新 DB 表中的列。在这种情况下,您可以将 DF 作为表转储到数据库中,并使用 SQL Alchemy 执行 UPDATE ... 语句。

这是一个小演示:

df.to_sql('tmp', conn, if_exists='replace')

sql = """
UPDATE table_name set last_seen = (SELECT t.last_seen
                                   FROM tmp t
                                   WHERE t.id = table_name.id)
WHERE EXISTS(
    SELECT *
    FROM tmp
    WHERE tmp.id = table_name.id
)
"""

cursor.execute(sql)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-31
    • 2017-12-18
    • 1970-01-01
    • 2018-05-04
    • 2020-04-29
    • 2019-06-26
    • 1970-01-01
    • 2015-02-16
    相关资源
    最近更新 更多