小编Eri*_*ren的帖子

更改Python Cmd模块处理自动完成的方式

我有一个Cmd控制台,用于自动完成Magic:收集管理系统的卡名称.

它使用text参数查询数据库中的卡片,并使用结果自动完成/建议卡片.

但是,这些卡名称有多个单词,Cmd从最后一个空格到行尾自动完成.

例如:

mtgdb> add Mage<tab><tab>
Mage Slayer (Alara Reborn)     Magefire Wings (Alara Reborn)
mtgdb> add Mage S<tab><tab>
Sages of the Anima (Alara Reborn)
Sanctum Plowbeast (Alara Reborn)
Sangrite Backlash (Alara Reborn)
Sanity Gnawers (Alara Reborn)
Sen Triplets (Alara Reborn)
[...]
mtgdb> add Mage Sl<tab>
mtgdb> add Mage Slave of Bolas (Alara Reborn)
Run Code Online (Sandbox Code Playgroud)

我试着从line参数中手动抓取我想要的东西,从数据库中获取我想要的结果,但这无法覆盖第一个单词:

mtgdb> add Mage Sl<tab>
mtgdb> add Mage Mage Slayer (Alara Reborn)
Run Code Online (Sandbox Code Playgroud)

最后,我需要自动完成器像这样工作:

mtgdb> add Mage Sl<tab>
mtgdb> add Mage Slayer (Alara …
Run Code Online (Sandbox Code Playgroud)

python command-line autocomplete

10
推荐指数
1
解决办法
9021
查看次数

在sqlalchemy映射集合中使用元组值

在多对多关系中,我在关联表上有一些额外的数据来描述关系(数量和布尔值).我想使用映射集合来避免直接使用关联对象,但我无法弄清楚如何使用元组来映射映射中的值.据我所知,Attribute作为使用带有SQLAlchemy的中间人表的列表的字典是类似的,但是向后.

为了说明这一点,我想做这样的事情:

>>> collection.items[item] = (3, True)
>>> collection.items[item] = (1, False)
>>> colletion.items
{"item name": (3, True), "item name": (1, False)}
Run Code Online (Sandbox Code Playgroud)

这......工作......但最终SQLAlchemy尝试将元组放入数据库(我将尝试重新创建它).

我也曾尝试在关键(相关对象和另一列之一)使用元组,但它看起来很可怕,而且它不工作:

>>> collection.items[item, True]  = 3
>>> collection.items[item, False] = 1
>>> collection.items
{(<item>, True): 3, (<item>, False): 1}
Run Code Online (Sandbox Code Playgroud)

可以将项目名称和一个值放在映射的集合中而不会出现问题:我有另一个(结构相同)形式的这种关系,我通过建立两个关系(和关联代理)来解决它们根据布尔值划分它们之间的关联表value,它们的创建函数正确设置布尔值,没有任何进一步的干扰.不幸的是,在这种情况下,布尔值指定了一个小的语义差异(应用程序代码需要将项目视为一个组),而在当前的问题中,这是一个不可忽视的外观差异(应用程序代码不应该将项目视为组,而是值确实会改变项目的显示方式,因此也是如此.

python sqlalchemy

3
推荐指数
1
解决办法
1981
查看次数

标签 统计

python ×2

autocomplete ×1

command-line ×1

sqlalchemy ×1