在python中选择简单数据库中的项目需要帮助吗

2024-06-09 14:40:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python编写一个电路原理图绘制工具。我正在创建一个基于字典的简单数据库,其中包含所有组件及其属性。我还尝试创建一个简单的查询语言,在这里可以选择值大于等于100欧姆或footprint='0402'的所有电阻

求一些复杂的事物的交集,然后用谓词来寻找更复杂的事物。在

但是,我很难定义一个纯否定搜索的语义应该是什么。例如,像

脚印!='0402'

应选择footprint不等于0402的所有项目。但是只求交集得到一个空白结果。为了实现这一点,我需要选择所有组件,然后与“not 0402”相交以删除我不想要的组件。在

但这似乎是一种蛮力,似乎是一个可疑的解决办法。我对使用“真实”的数据库和查询语言不感兴趣,所以请不要这样建议。我在这里寻找合适的工程原理,不一定是解决问题的方法。在

这个问题在SICP的书中有一定程度的涉及,但我很困惑,因为我认为他们也在使用延续和其他东西,我还不知道。在

有人能解释一下什么是“正确的”使用应该是消极选择的东西。我在一个商业cad工具中尝试了这个方法,它和预期的一样工作,但是后来我看到了一些SQL查询示例(我想),它首先选择了的东西,然后删除了不需要的内容。在

谢谢
迈克尔


Tags: 工具方法数据库字典属性定义语义绘制
3条回答

我同意S.洛特的观点,你会更喜欢一个真正的DB。SQLite非常轻巧和快速,使用它几乎没有缺点。在

如果您真的需要向用户公开一种更简单但完整的查询语言,请选中JSONPath或{a2}(第二种语言是第一种查询语言的超集)。JavaScript的确切语法(显然)是有思想的;但它应该给您一些想法。在

另外,尝试检查XPath和XQuery的异同。这有助于了解哪些是有用的,哪些是特定于文化的。在

有了一个合适的数据库你会更开心。在

在Python发行版中有SQLite。只需定义表而不是字典并使用SQL。在

如果您需要更多的功能和复杂性,您可以添加SQLAlchemy(或SQLObject),这样您就不会为这些问题而烦恼了。在

它实际上取决于你是如何实现这个“基于字典的简单数据库”来解释为什么直接否定不起作用——你必须给我们更多的线索。在

在Python中,没有理由不让直接的否定匹配工作,例如:

components = [
    { 'name': 'resistor', 'footprint': '0402', },
    { 'name': 'LED', 'footprint': '0100', },
    { 'name': 'speaker', 'footprint': '2000', },
]

[comp for comp in components if comp['footprint'] != '0402']
# [{'footprint': '0100', 'name': 'LED'}, {'footprint': '2000', 'name': 'speaker'}]

总之,这是一个基于字典的简单数据库—具体功能将取决于您的实际实现。在

我拒绝建议使用真实的数据库和查询语言,因为我认为这是一个学习练习。这是一种学习练习,对吧?:)

相关问题 更多 >