使用 sqlalchemy 和纯 python(不依赖 pyodbc)将列名中带有特殊字符(点“.”)的 pandas 数据帧推送到 mssql

Vij*_*jay 5 python sqlalchemy pyodbc

下面的命令保存包含特殊字符(点 - \xe2\x80\x9c.\xe2\x80\x9d)的 pandas 数据框,使用 \xe2\x80\x9cpyodbc\xe2\x80\x9d 库可以正常工作,但在尝试时抛出以下错误使用纯Python( sqlalchemy和pytds) 将数据推送到sql中

\n\n
df = pd.DataFrame({\xe2\x80\x98name.display\':\xe2\x80\x98display value\xe2\x80\x99, \xe2\x80\x98name.value\':\xe2\x80\x98John\'})\ndf.to_sql(\'users\', con=engine, if_exists=\xe2\x80\x98replace\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

错误:\n sqlalchemy.exc.OperationalError:(pytds.tds_base.OperationalError) \xe2\x80\x98 附近的语法不正确。\xe2\x80\x99 必须声明标量变量 \xe2\x80\x9c@user\xe2\x80\ x9d

\n\n

我已经尝试过\xe2\x80\xa6

\n\n
    \n
  1. 用方括号括住列名称,但当数据被推入数据库时​​,pandas 似乎已经完成了 \xe2\x80\x99 并最终在列名称周围创建双括号并在表创建时失败
  2. \n
  3. 尝试重命名列名称(将 \xe2\x80\x9c.\xe2\x80\x9d 替换为 \xe2\x80\x9c_\xe2\x80\x9d),但我们有一个要求,需要跨多个列命名约定中的点数据库表
  4. \n
\n\n

寻找纯Python方法,因为我们的linux环境没有\xe2\x80\x99t有odbc支持

\n\n

想向 python 社区咨询是否有任何建议,非常感谢

\n