【问题标题】:pandas read_sql not reading all rowspandas read_sql 没有读取所有行
【发布时间】:2016-06-20 21:02:48
【问题描述】:

我正在通过 pandas 的 read_sql 和外部应用程序 (DbVisualizer) 运行完全相同的查询。

DbVisualizer 返回 206 行,而 pandas 返回 178。

我已经尝试根据How to create a large pandas dataframe from an sql query without running out of memory?提供的信息通过chucks从pandas读取数据,但没有改变。

这可能是什么原因以及解决方法?

查询:

select *
from rainy_days
where year=’2010’ and day=‘weekend’

这些列包含:日期、年份、工作日、当天的降雨量、温度、geo_location(每个位置的行)、风力测量值、前一天的降雨量等。

确切的python代码(减去连接细节)是:

import pandas
from sqlalchemy import create_engine

engine = create_engine(
   'postgresql://user:pass@server.com/weatherhist?port=5439',
)

query = """
        select *
        from rainy_days
        where year=’2010’ and day=‘weekend’
        """
df = pandas.read_sql(query, con=engine)

【问题讨论】:

  • 你使用了奇怪的引号(对于year=’2010’),我不知道这是否是一个原因,但你可以用普通的单引号替换它们吗? (')
  • 有解决办法吗?我正在运行同样的问题。
  • 同样的问题。我有一个总共 7 行的表,pandas.read_sql_table 有 7 行,但 pandas.read_sql 有 5 行。

标签: pandas sqlalchemy


【解决方案1】:

https://github.com/xzkostyan/clickhouse-sqlalchemy/issues/14

如果你使用纯 engine.execute 你应该手动关心格式

【讨论】:

    【解决方案2】:

    什么对我有用:

    1. 删除索引
    2. 将整个内容导出到 csv:
    3. 删除所有行:

      从表中删除

    4. 将 csv 重新导入

    5. 重建索引

    我认为如果我使用 pandas 会更快:

    df = read_csv(..)
    df.to_sql(..)
    

    我认为这对于 x mm 行的表应该很容易工作,但是对于非常大的表可能会很慢。

    【讨论】:

    • 奇怪的引号 `` 在 SQL 中用于区分字段名和保留字,例如选择`right` FROM ...
    猜你喜欢
    • 2013-03-23
    • 1970-01-01
    • 2017-10-17
    • 2020-11-23
    • 1970-01-01
    • 2016-12-15
    • 2014-05-18
    • 2019-10-21
    • 2018-05-05
    相关资源
    最近更新 更多