当前位置: 首页 > 面试题库 >

将所有python-rom对象放入列表

汪志业
2023-03-14
问题内容

我正在使用烧瓶和Redis。我决定尝试使用rom redis
orm(http://pythonhosted.org/rom/)来管理一些较为复杂的数据结构。我有一个对象列表,可以说:

urls = ['www.google.com', 'www.example.com', 'www.python.org']

我也有rom模型:

class Stored_url(rom.Model):
    url = rom.String(required=True, unique=True, suffix=True)
    salt = rom.String()
    html" target="_blank">hash = rom.String()
    created_at = rom.Float(default=time.time)

这似乎在我的开发人员设置上起作用。我已经将大约25个“
Stored_url”对象加载到REDIS中(在cmd行中确认)。我正在尝试提出一种将所有Stored_url类型的对象放入python列表的方法。

>>> test = Mymodels.Stored_url
>>> type(test)
Out[35]: rom._ModelMetaclass
>>> h =test.query.filter(url ='.').all()
>>> h.count()
Traceback (most recent call last):
  File "C:\envs\virtalenvs\flaskenv\lib\site-packages\IPython\core\interactiveshell.py", line 3035, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-37-43f0dc233d70>", line 1, in <module>
    h.count()
TypeError: count() takes exactly one argument (0 given)

我以为h将有一个对象列表。我究竟做错了什么?(我被“。”过滤,因为我想知道它会得到它)


问题答案:

您提供的代码有两个问题,这些问题解释了为什么获得结果。

第一个问题是您的查询test.query.filter(url ='.').all()将返回一个空列表。这将仅由于您没有与指定过滤器一起使用的有效索引而返回空列表。您确实有该列的2个索引-
唯一索引(用于按精确字符串查找url)和后缀索引(用于查找以特定字符串结尾的url)-但都不能提供按内容进行过滤的功能在关系世界中,存在一个“喜欢”查询。前缀索引(使用创建的索引prefix=True)可以让您使用test.query.like(url='*.'),但这会非常慢(它执行索引扫描而不是直接查找[1])。

为了帮助防止出现与索引/查询相关的问题,当用户尝试通过不存在的索引过滤数据时,我添加了QueryError异常。今晚晚些时候,我将通过这些更改发布0.31.4。

您遇到的第二个错误(是导致异常的原因)是您在.count()没有参数的情况下进行调用。在h.count()调用时type(h) == list,和和Python列表对象需要一个参数来对等于列表中提供的参数的值进行计数。如果跳过.all()原始查询的一部分,则会返回一个查询对象。该查询对象具有一个.count()方法,并将返回匹配结果的计数。

[1]并非rom中的所有“喜欢”查询都很慢,但是快速的查询需要非通配符前缀以限制要扫描/过滤的数据范围。



 类似资料:
  • 我试图用我使用Gson()提取的POJO填充JTable。使用调试器,或者使用toString()将值打印到控制台,我可以看到对象的映射是成功的。我的问题在于用对象填充自定义Jtable。 问题:我的GUI包含一个按钮,它获取一个搜索字段,并将其发送到一个API,该API返回一个JSON响应,我正确映射了JSON,但我不知道如何将数据放入表中。 我尝试过的:addFillings()和insert

  • 问题内容: 我创建了许多对象,然后将它们存储在列表中。但是我想在一段时间后删除它们,因为我创建了一个新闻,并且不希望我的内存过高(就我而言,如果不删除它,它会跳到20 gigs的内存)。 这里有一些代码来说明我要做什么: A和B是我的对象。C是这两个对象的列表。我正在尝试使用C中的for循环将其删除:一次是使用DEL,另一次是使用一个函数。它似乎不起作用,因为打印继续显示对象。 我需要这个,因为我

  • 我明白,在列表中使用下界通配符作为方法参数应该让我们放置下界及其超级类型的元素,但请考虑以下代码: 我试图找到答案,但找不到确切的情况。

  • 我正在编写一个python程序,可以循环reddit提交,提取数据,并将其作为对象存储在列表中。但是,我在将该列表写入csv文件时遇到困难。文件已创建,但它只是为对象提供某种id标记。我应该如何更改csv代码? 代码 CSV文件

  • 问题内容: 我有问题来存储的所有值成。这里和是数组的数组。我想将它们的所有值分别存储在和中。的和是字符串的数组。 这是我的尝试,但仅存储每个数组的最后一项。 注意:我已经尝试过了,但是对我不起作用。 问题答案: 为了通用,首先让它成为对象列表 您想要放入对象列表 注意结果列表将包含每个对象,包含的是输入列表。 这种转换将丢失有关哪个对象位于哪个列表中的信息。 您必须遍历。在每个循环中,您都会获得一

  • 问题内容: 我想知道php中是否有一个函数可以让我将所有选择的数据放在一个数组中。当前我正在使用mysql_fetch_array,并且正如我在手册中所读的那样,该函数不会获取表中的每条记录。 问题答案: 我建议出于性能和安全目的使用MySQLi或MySQL PDO,但要回答这个问题: 如果您切换到MySQLi,则可以执行以下操作: