Python - 具有非一致参数的数据库查询函数

时间:2012-12-02 16:41:04

标签: python sql

所以我有一个包含10个字段的数据库(称之为a,b,c .... j),我需要创建一个函数“find_use()”,可以根据任何内容查找和修改数据库中的记录作为参数赋予它的字段组合(即:find_use(a ==“happy”,g ==“birthday”))。此外,由于权限,我不直接生成SQL查询,而是使用SQL包装器,系统提供称为“selector()”,它将根据相同的参数定位记录,即:query = selector(a ==“ happy“,g ==”birthday“),然后返回匹配记录的列表

所以问题是,因为我不知道find_use()将接收什么参数,我不知道如何构造对selector()的内部调用。理想情况下,应该动态创建对选择器的调用;事情的影响:

def find_use(a='',b='',c='',.....j=''):
   vars = locals()
   for v in vars:
      if v.value() != '':
        q_string += '{0} == {1},'.format(v.key(),v.value())
   query = selector(q_string) 
   ...do something to query...

然而,这不起作用,因为选择器不接受字符串,而是采用与find_use()函数相同格式的参数。那么,如何做到这一点呢。我觉得这实际上很容易,我只是遗漏了一些明显的东西。任何意见都将不胜感激。

1 个答案:

答案 0 :(得分:2)

我认为您正在寻找keyword argument unpacking

def find_use(**kwargs):
   query = selector(**kwargs) 
   ...do something to query...

以这种方式定义时,find_use可以接收任意数量的关键字参数。关键字参数收集在dict kwargs中。

例如,

def foo(**kwargs):
    print(kwargs)    
foo(a = 'happy', g = 'birthday')

产量

{'a': 'happy', 'g': 'birthday'}

如果

def bar(a, g):
    print(a)
    print(g)

然后

bar(**{'a': 'happy', 'g': 'birthday'})  # like selector(**kwargs)

产量

happy
birthday