我有一个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) 在多对多关系中,我在关联表上有一些额外的数据来描述关系(数量和布尔值).我想使用映射集合来避免直接使用关联对象,但我无法弄清楚如何使用元组来映射映射中的值.据我所知,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,它们的创建函数正确设置布尔值,没有任何进一步的干扰.不幸的是,在这种情况下,布尔值指定了一个小的语义差异(应用程序代码需要将项目视为一个组),而在当前的问题中,这是一个不可忽视的外观差异(应用程序代码不应该将项目视为组,而是值确实会改变项目的显示方式,因此也是如此.