使用Python模块peewee将行插入具有未知模式的数据库中

时间:2015-11-08 23:49:14

标签: python database postgresql peewee

我正在使用Python的peewee模块构建数据库接口。我试图弄清楚如何将数据插入到我不知道架构的现有数据库中。

我的想法是使用playhouse.reflection.Introspector找出数据库模式,然后使用该信息创建类对象,然后将其插入到现有数据库中。

到目前为止,我已经到了:

introspector = Introspector.from_database(database) models = introspector.generate_models()

我不知道从那里去哪里。

1)我可以用这种方式创建数据库对象吗?你下一步怎么做?

2)有更简单的方法吗?

2 个答案:

答案 0 :(得分:2)

peewee包含一个名为pwiz的内省工具,它可以(基本上)内省数据库并生成模型定义。它作为命令行脚本运行并将模型定义转储到stdout,因此invokation就像任何其他unix工具一样。以下是the docs的示例:

python -m pwiz -e postgresql my_postgres_db > mymodels.py

从那里编辑mymodels.py以获得所需内容。

可以动态地执行此操作,但它需要几个步骤并且是hackish(更不用说如果你真的不了解架构的话就没有意义):

  • 将pwiz作为os命令运行
  • 阅读它以挑选模型名称
  • 导入您找到的任何内容

<强> BUT

如果确实不知道要开始的架构,那么你根本不知道数据库的语义是什么,这意味着无论你发现什么都没有意义。除非你至少知道一些你正在寻找的模式/表/列名称(在这种情况下你对模式有所了解),否则你对插入的确无法做多少事情。数据(不是一种理智的方式),尽管你当然可以从数据库中转储数据。但如果您只是想要数据库转储,那么pg_dump会更容易。

我怀疑这实际上是一个X-Y问题。你试图用这种技术解决什么问题?它应该在你的系统环境中实现什么效果?

答案 1 :(得分:0)

如果要创建GUI,请查看sqlite_web项目。它使用Peewee创建基于Web的SQLite数据库管理器。