繁体   English   中英

Python SQLAlchemy 导入小写的表名(雪花)

[英]Python SQLAlchemy Importing Table Names in Lowercase (Snowflake)

使用 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
    )

在此处输入图像描述

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

未加引号的 object 标识符被存储并解析为大写字符(例如id被存储并解析为ID )。

Snowflake 以大写文本存储所有不区分大小写的 object 名称。 相比之下,SQLAlchemy 认为所有小写 object 名称不区分大小写。 Snowflake SQLAlchemy 在模式级通信期间(即在表和索引反射期间)转换 object 名称大小写。 如果您使用大写 object 名称,则 SQLAlchemy 假定它们区分大小写并用引号将名称括起来。 此行为将导致与从 Snowflake 接收的数据字典数据不匹配,因此除非使用引号将标识符名称真正创建为区分大小写,例如“TestDb”,否则应在 SQLAlchemy 端使用所有小写名称。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM