python - sqlite3 选择两个参数
问题描述
所以我有一个有两个属性的表,父级和子级。它们引用节点并创建表。我必须使用一个 lambda 函数,该函数仅在给定的两个参数共享同一个父级时才返回父级。例如,假设我有(父母,孩子)对(a,b)和(a,e)。B 和 E 是两个输入参数,因此由于它们共享父级,func(b,e) 将返回“a”。
import sqlite3
dog = sqlite3.connect("example1.db")
c = dog.cursor()
r = [('c','a'),('a','b'), ('a','e'),('c','d'),
('c','f'),('f','g'), ('f','h'),('h','j'),
('h','i')]
c.execute('DROP TABLE IF EXISTS G')
c.execute('''CREATE TABLE G (Parent text, Child)''')
c.executemany('INSERT INTO G VALUES (?,?)', r)
dog.commit()
q = lambda x,y: 'SELECT G.Parent FROM G WHERE G.Child == "e"'
print(c.execute(q('b','e')).fetchone())
print(c.execute(q('h','g')).fetchone())
print(c.execute(q('e','a')).fetchone())
dog.close()
现在我有只返回'e'的父母的东西,因为我迷路了。
解决方案
应该满足您寻找共同父母要求的查询是:
q = """select a.parent
from
(select parent from g where child = ?) a
inner join
(select parent from g where child = ?) b
on a.parent = b.parent"""
print(c.execute(q, ('b', 'e')).fetchall())
由于您指定需要使用 lambda 函数,我猜这可能是某种类型的家庭作业。我不知道您或您的讲师对 lambda 的限制是什么,但我可能会编写一个返回一组父母的函数,然后使用 lambda 返回交集。伪代码,因为这可能是家庭作业:
def getParents:
return set( parents of child )
q = lambda x,y: getParents(x).intersection(getParents(y))
print q('b','e')
推荐阅读
- r - gtsummary 表:将空单元格信息替换为 -
- javascript - 删除数组中的重复项(拼接)
- visual-studio - 在哪里可以找到版本控制分支命名指南?
- python - Python条件追加json项目
- python - 在 python 中找到更大的矩阵中的小矩阵,但不知道如何(附图)
- flutter - RangeError(长度):无效值:只有有效值是 0:1. 抛出错误 'ErrorDescription' 的实例
- c# - 接受任何参数的方法,循环遍历它以搜索 DateTime 变量,更改它们并在 C# 中返回一个新对象
- java - 使用 Jenkins Job Builder 将参数传递给 Jenkins 构建的问题
- javascript - Facebook Graph API:在 HTML 网页上显示来自控制台的 JSON 数据
- html - 为什么我转换后的 html 字符串只显示第一行?