问题标签 [peewee]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2717 浏览

python - Python:使用 Peewee 转储数据库数据

背景

我正在寻找一种将使用 Python 和 Peewee 进行的 MySQL 查询结果转储到 excel 文件的方法,包括数据库列标题。我希望导出的内容以与数据库中的列几乎相同的顺序排列。此外,我希望有一种方法可以跨多个可能具有略微不同字段的类似数据库工作。澄清一下,一个数据库可能有一个包含“User, PasswordHash, DOB, [...]”的用户表,而另一个数据库有“User, PasswordHash, Name, DOB, [...]”。

问题

我的主要问题是以有序的方式获取列标题。迄今为止的所有尝试都导致了无序的结果,并且所有这些都没有那么优雅。

其次,到目前为止,我的方法导致我(个人)讨厌维护的代码,我知道这是一个不好的迹象。

工作至今

目前,我已经使用 Peewee 的 pwiz.py 脚本为目标数据库中的每个预先存在的数据库表生成模型,然后输入所有主键和外键。关系已建立,一些简短的测试表明它们正确关联。

代码:我设法使用类似于以下内容的方式获取列标题:

如前所述,这是无序的。此外,这样做会迫使我做一些类似的事情

相应地动态填充字段。

想法和可能的解决方案

  • 手动写出我想要的东西在数组中的顺序,并使用它来循环和填充数据。这样做的优点是非常严格/精细的控制。缺点是我需要为每个数据库指定这个。

  • 为所有可能遇到的字段创建(无论是手动还是通过方法)具有相关加权值的字段哈希,然后编写一个根据权重对“_meta.get_field_names()”进行排序的方法。这样做的缺点是列可能不是 100% 以正确的顺序排列,例如在一个 DB 中 Name 在 DOB 之前,而在另一个 DB 之后。

随时告诉我我做错了,或者提出完全不同的方法,我全都听好了。我对 Python 和 Peewee(实际上是一般的 ORM)非常陌生。我可以切换回 Perl 并通过 DBI 进行数据库查询,几乎没有任何麻烦。但是,它的 excel 库会给我带来很多问题,我想借此机会扩展我的知识。

0 投票
2 回答
5045 浏览

python - 如何在 peewee 2 中创建带有枚举的表模型?

我正在尝试创建一个模型来描述一个带有 enum 字段的表peewee

我看到 EnumField 在 2.0 版本之前已从 peewee.py 文件中删除,并且我在当前文档中找不到任何概述如何实现它的内容。有谁知道我是否可以只使用 CharField?

0 投票
1 回答
1151 浏览

python - Peewee - 查询 ['str' in item]

我知道我这样做是错误的 - 我如何在没有列表理解但在 peewee 中查询的情况下做到这一点。我想查询一下搜索词是否“在”对象参数中。

0 投票
1 回答
2481 浏览

python - Windows 的 peewee 安装程序

我正在尝试在 Windows 机器上安装 peewee。有windows的安装程序吗?或Windows的安装说明?我是 Python/peewee 的新手,似乎找不到任何东西。

0 投票
2 回答
157 浏览

python - 控制数据库查询流程的更好方法

在我的程序中,我需要读取一个非常大的表(它超出了内存存储)并让我自己编写以下构造来从表中读取并做一些工作。虽然我知道很有可能将选择重写为迭代器样式,但它仍然具有以下基本结构:

我想做的是有一些不携带尽可能多的笨拙状态变量的东西。关于如何清理这个烂摊子的想法?

仅供参考 - 我也试过这个,不确定我是否更喜欢它:

0 投票
2 回答
1585 浏览

python - Python Peewee 重置主键

在某些情况下,Python 模块 Peewee 会在保存对象时重置(非整数)主键。我构建了这个例子来澄清:

示例输出:

现在,最后一行不应该是 1,而是 2fe... 如上一行。有趣的是,正如示例所示,这仅发生在子对象上。

我在这里完全误解了什么吗?

0 投票
4 回答
15378 浏览

python - 为什么 peewee 在 mysql 选择查询中包含“id”列?

我正在尝试学习如何将 peewee 与 mysql 一起使用。

我在具有现有表的 mysql 服务器上有一个现有数据库。该表目前是空的(我现在只是在测试)。

我收到以下错误:

为什么 peewee 将“id”列添加到选择查询中?我的表中没有数据库中已经存在的 id 列。我只是想使用现有的表,而不是依赖 peewee 每次我想与数据库交互时都必须创建一个。这就是我认为错误所在的地方。

查询的结果应该是空的,因为表是空的,但是因为我正在学习,我只是想尝试一下代码。我感谢您的帮助。

编辑

基于 Wooble 和 Francis 的有益回应,我开始怀疑使用 peewee 或其他 ORM(如 sqlalchemy)对我来说是否有意义。使用 ORM 而不是仅使用 MySQLdb 在 python 中运行直接查询有什么好处?

这是我期望做的:

- 自动从各种网络服务器下载数据。大多数数据是 xls 或 csv 格式。我可以使用 xlrd 包将 xls 转换为 csv。

- 在插入/批量插入 mysql 数据库表之前解析/处理列表对象中的数据。

- 运行复杂的查询以将数据从 mysql 导出到 python 到适当的数据结构(例如列表)中,用于各种统计计算,这在 python 中而不是 mysql 中更容易完成。可以在 mysql 中完成的任何事情都将在那里完成,但我可能会在 python 中运行复杂的回归。

- 对从查询中检索到的数据运行各种图形包。其中一些可能包括使用 ggplot2 包(来自 R-project),这是一个高级图形包。所以我将涉及一些 R/Python 集成。

鉴于上述情况 - 我最好花几个小时学习 ORM/Peewee/SQLAlchemy 还是坚持使用 MySQLdb 直接查询 mysql?

0 投票
1 回答
3141 浏览

python - peewee:对象没有属性 _meta

我正在使用 Python 3.3 32 位在 Windows 上工作。我已经安装了 peewee 并想尝试它的一些功能。我从 Peewee 快速入门 ( http://peewee.readthedocs.org/en/latest/peewee/quickstart.html ) 开始。

我的代码如下所示:

我得到一个错误:

我的 peewee 安装有问题吗?我该如何解决这个问题?

0 投票
1 回答
785 浏览

python - Python orm日期时间问题

我在一个带有日期时间字段的非常大的数据库中有一个 Peewee 数据库模型 Products。当我想选择具有(插入时间大于现在())的文章时,查询将永远挂起。

我不确定是因为数据库大小(大于 10 GB)还是因为查询样式。

我应该像这样使用 datetime(2013, 04, 03, 14, 52, 50) 还是 "2013-04-03 14:52:50" ?

0 投票
6 回答
5825 浏览

python - 使用 peewee ORM 对代码进行单元测试的自定义 sqlite 数据库

我正在尝试使用 peewee python ORM 实现多对多场景,我想要一些单元测试。Peewee 教程很棒,但它假设数据库是在模块级别定义的,然后所有模型都在使用它。我的情况不同:我没有明确运行的测试的源代码文件(从python的角度来看的模块),我正在使用从该文件收集测试并运行它们的nose。

如何仅将自定义数据库用于在测试中实例化的模型(由鼻子运行)?我的目标是仅使用内存数据库进行测试,以加快测试过程。