sqlite3使用两个参数选择

问题描述 投票:0回答:1

所以我有一个具有两个属性的表,父级和子级。它们引用节点并创建表。我必须使用仅当给定的两个参数共享同一父代时才返回父代的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'的父对象的原因,因为我迷路了。

python sql sqlite lambda
1个回答
0
投票

满足您寻找共同父母的要求的查询是:

   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')
© www.soinside.com 2019 - 2024. All rights reserved.