【问题标题】:Pandas to_sql has error for a wide table: The identifier that starts with 'xxx' is too long. Maximum length is 128. (103) (SQLExecDirectW)Pandas to_sql 对于宽表有错误:以“xxx”开头的标识符太长。最大长度为 128。 (103) (SQLExecDirectW)
【发布时间】:2020-07-20 15:04:12
【问题描述】:

我有一个包含 232 个唯一列的数据框,需要写入 SQL 表。键是传感器数据,看起来像

Index(['DMAnt[-]', 
       'DMCst[-]',
       
       ...
       'WRP[%]', 
       'WRD_S[rpm]'],
      dtype='object', length=232)

当我尝试通过 to_sql 函数在 SQL 中创建表时

df_send.to_sql('Sensor_table', con=engine, if_exists='append', index=False)

我收到以下错误:

ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]The identifier that starts with 'DMAnt[-] FLOAT(53) NULL, DMCst[-] FLOAT(53) N' is too long. Maximum length is 128. (103) (SQLExecDirectW)")

这个错误是否因为我有很多列而抱怨查询太长?我该如何解决这个问题?

【问题讨论】:

  • 实际上是列名中的方括号弄乱了查询,使它认为我的列名很长。在我删除所有 [] 后,它现在工作正常。无论如何,感谢您的回答,因为您指出了正确的方向

标签: python sql-server pandas dataframe


【解决方案1】:

错误是提到 SQL Server 列名只能是 128 个字符的限制。您需要将 DataFrame 列名修改为符合该长度要求。

SQL Server 中的限制: https://docs.microsoft.com/en-us/sql/sql-server/maximum-capacity-specifications-for-sql-server?view=sql-server-ver15

【讨论】:

  • 是不是所有列名加起来不超过128个字符?我有 232 列,这很难实现
  • @JeffHo 不,它是每一列。 SQL Server 允许每个表包含 1000 多个列。
【解决方案2】:

错误消息是说列名太长。将该列重命名为稍短的名称以保持在 128 个字符以下,并且该错误消息应该会消失。

【讨论】:

  • 是不是说所有的列名组合起来太长了? 232 列的名称如何使用少于 128 个字符?
  • @JeffHo 不,这是说一个特定的列是问题所在。我拉入具有 200 多列的表格。它是列名本身的长度。可能还有更多,但您应该能够看到它,它会给您一个新的列名。 `以 'DMAnt[-] FLOAT(53) NULL 开头,DMCst[-] FLOAT(53) N' 太长。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
相关资源
最近更新 更多