【问题标题】:Python SQLAlchemy Importing Table Names in Lowercase (Snowflake)Python SQLAlchemy 以小写形式导入表名(雪花)
【发布时间】:2021-08-27 19:22:44
【问题描述】:

同时使用 pandas.read_sql 和 pandas.read_sql_table,我不断获取整个表,所有列名都以小写形式显示。 反正有这个吗?

我想对数据进行一些转换,然后替换数据库中的表,但是如果这样做会将所有列名都更改为小写,那就很痛苦了。

#both of these produce the same lowercase columns
    sql = 'SELECT * from "DB"."SCHEMA"."'+"tablename"+'"; '
        
    df = pd.read_sql(
    sql,
    con=engine
    )

    df = pd.read_sql_table(
    "tablename",
    con=engine
    )

【问题讨论】:

  • 您能否提供有关此问题的更多详细信息? Snowflake 中表的实际 DDL 是什么?当您执行 read_sql() 时,数据框到底是什么样的?您使用什么命令将数据写回 Snowflake?
  • @MikeWalton 刚刚尝试添加我使用的代码和 DF 的截图。
  • 您能否确认您已安装支持的适用于 Python、Pandas 和 Python 的 Snowflake 连接器版本,详见此处? docs.snowflake.com/en/user-guide/python-connector-pandas.html
  • 如果您使用推荐的fetch_pandas_all 方法而不是read_sql,您是否仍然遇到此问题? docs.snowflake.com/en/user-guide/…

标签: python sql pandas sqlalchemy snowflake-cloud-data-platform


【解决方案1】:

您确定这是一个问题吗? https://docs.snowflake.com/en/sql-reference/identifiers-syntax.html 说:

不带引号的对象标识符以大写形式存储和解析 字符(例如,id 存储并解析为 ID)。

【讨论】:

  • 我认为是的,因为我在读取数据帧后对它们执行区分大小写的操作。
【解决方案2】:

Snowflake 以大写文本存储所有不区分大小写的对象名称。 相反,SQLAlchemy 认为所有小写的对象名称都是 不区分大小写。 Snowflake SQLAlchemy 转换对象名称大小写 在模式级通信期间,即在表和索引期间 反射。如果您使用大写的对象名称,SQLAlchemy 假定它们 区分大小写并用引号将名称括起来。这种行为 将导致从接收到的数据字典数据不匹配 雪花,所以除非标识符名称已经真正创建为大小写 使用引号敏感,例如“TestDb”,所有小写名称都应该是 用于 SQLAlchemy 方面。

https://github.com/snowflakedb/snowflake-sqlalchemy

lowercase 是 Sqlalchemy 中的默认行为。如果没有必要,您不应该在 Sqlalchemy 或 pandas 中使用大写字母。您可以在 Sqlalchemy 中使用 "..."quote_names 来指定区分大小写。 如果您坚持为所有人获取大写列,这篇使用事件监听器的帖子可能会有所帮助https://stackoverflow.com/a/34322171/12032355

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-14
    • 2014-08-08
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 2021-11-01
    相关资源
    最近更新 更多