python - 使用flask-sqlqcodegen 为 Flask-AppBuilder 生成模型

标签 python postgresql flask flask-sqlalchemy

我是 Python 和 Flask 生态系统的初学者,正在尝试为一个研究项目创建一个小型概念验证 Web 应用程序。我正在使用 Debian Linux 7.9、PostgreSQL 9.5、SQLAlchemy(最新)和 Flask-AppBuilder(最新)。由于手动创建模型既繁琐又容易出错,我搜索了强大的互联网并发现了 flask-sqlacodegen 项目(请注意,这是 sqlacodegen 的一个分支,改进了 Flask 的功能用户)。我从 GitHub 安装了 Flask-sqlqcodegen(克隆存储库,然后运行 ​​python setup.py install)。但是,当尝试使用它生成模型时,会产生错误,如下所示:

> sqlacodegen postgresql+psycopg2://USER:PASS@HOST/DBNAME --flask

Traceback (most recent call last):
  File "/usr/local/bin/sqlacodegen", line 9, in <module>
    load_entry_point('sqlacodegen==1.1.5.pre2', 'console_scripts', 'sqlacodegen')()
  File "/usr/local/lib/python2.7/dist-packages/sqlacodegen-1.1.5.pre2-py2.7.egg/sqlacodegen/main.py", line 57, in main
    args.flask, fkcols)
  File "/usr/local/lib/python2.7/dist-packages/sqlacodegen-1.1.5.pre2-py2.7.egg/sqlacodegen/codegen.py", line 597, in __init__
    model = ModelClass(table, links[table.name], inflect_engine, not nojoined)
  File "/usr/local/lib/python2.7/dist-packages/sqlacodegen-1.1.5.pre2-py2.7.egg/sqlacodegen/codegen.py", line 319, in __init__
    relationship_ = ManyToOneRelationship(self.name, target_cls, constraint, inflect_engine)
  File "/usr/local/lib/python2.7/dist-packages/sqlacodegen-1.1.5.pre2-py2.7.egg/sqlacodegen/codegen.py", line 455, in __init__
    colname = constraint.columns[0]
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/_collections.py", line 194, in __getitem__
    return self._data[key]
KeyError: 0

这是怎么回事?任何帮助将不胜感激。

最佳答案

经过一些互联网搜索,我在 GitHub 上遇到了一个问题,它描述了完全相同的问题。然而,当时的最新建议产生了另一个错误,而不是原来的错误。在 discussion Flask-sqlcodegen 的作者发现,项目贡献者善意地提供了一个拉取请求 (PR),显然应该可以解决该问题。更新本地存储库,然后重建并重新安装软件后,我能够成功为我的数据库生成模型。整个过程包括以下步骤。

  1. 更改为包含 flask-sqlcodegen 本地存储库的目录。
  2. 如果您像我一样进行了任何更改,请将它们隐藏起来:git stash
  3. 更新存储库:git pull origin master(现在包括该 PR)。
  4. 重建/安装软件:python setup.py install
  5. 如果您需要之前的更改,请恢复它们:git stash pop。否则,丢弃它们:git reset --hard
  6. 更改到 Flask 应用程序目录并自动生成模型,如下所示。

    sqlacodegen --flask --outfile models.py postgresql+psycopg2://USER:PASS@HOST/DBNAME

致谢:非常感谢 Kamil Sindi(flask-sqlcodegen 的作者)提供的优秀软件和快速且有用的反馈,以及 Alisdair Venn 的帮助那个有值(value)的拉取请求。

关于python - 使用flask-sqlqcodegen 为 Flask-AppBuilder 生成模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38657634/

相关文章:

python - 将 Flask 的 Click CLI 与应用工厂模式结合使用

python - Flask-Bootstrap quick_form 认为从 render_template 传入的表单未定义

python - pandas groupby 索引值

python - python中面向对象的构造等价于什么?

python - Flask 单元测试 - 如何为每个测试重置 app.url_map?

php - Laravel - 通知或分派(dispatch)作业队列工作人员 laravel 会导致带锁表的双重选择吗?

postgresql - 创建 template_postgis 时无法访问文件 "$libdir/plpgsql"

python - 'content'和 'text'有什么区别

python - 检测列表中的相同值

python - 在数据库中存储多个 excel 文件的有效方法?