【问题标题】:SyntaxError: Invalid character in identifier when importing models generated using sqlacodegenSyntaxError:导入使用 sqlacodegen 生成的模型时,标识符中的字符无效
【发布时间】:2017-10-10 10:58:26
【问题描述】:

我在 postgresql 中自动生成表,模型是使用 sqlacodegen 使用列表中的名称自动生成的。

有些名称是非 ASCII 字符。对于名称????aussieBabe????,它创建了一个表????aussieBabe????_index,其sqlAlchemy 模型为????aussieBabe????Index。但是当我尝试导入这些模型进行查询时,我得到以下错误。

line 147
    class ????aussieBabe????Index(Base):
                              ^
SyntaxError: invalid character in identifier

我认为这可以通过在创建表或限制类名之前删除无效字符来解决。我想限制sqlacodegen 生成的类名,我该如何实现呢?或者我可以为代码设置 Unicode 编码吗?

【问题讨论】:

  • 将错误发布到问题跟踪器!
  • 如果您等不及修复错误,将_re_invalid_identifier 更改为github.com/agronholm/sqlacodegen/blob/master/sqlacodegen/… 可能会有用;或者甚至可以在 Python2 下运行它来完全避免标识符中的 unicode 字符。
  • 将发布错误报告,现在我将按照@snakecharmerb 的建议更改_re_invalid_identifier
  • @Harwee 实际上,你确定你运行的是同一个版本吗?正则表达式 \W 匹配 ???? 所以这些应该被删除...
  • 是的,那些应该手动删除,但是我有太多的名字有这样的问题,我需要创建一个映射来动态指向新的类,但无论如何 sqlacodegen 应该至少引发错误而不是写无效我猜是_re_invalid_identifier处理的字符。

标签: python postgresql sqlalchemy sqlacodegen


【解决方案1】:

您的表名包含一些甚至 Python 3 都不允许的字符。您需要手动修复类名。正如其文档所述,不能期望 SQLACodegen 产生完美的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 2023-03-09
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    相关资源
    最近更新 更多